From a38195128ffe15e9716f56fdc3c56414dbdb6f19 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Sun, 30 Aug 2026 00:26:19 +0300 Subject: [PATCH] feat(stdlib): namespaced standard library (issue #2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement the bulk of the namespaced-stdlib proposal (workshopsoft/ludic#2): 156 namespace methods across Math, Text, List, Ease, Collide, World, Net, Sys, Save, Mem, extended Screen, Color functions, extended Random, and Time. All deterministic fixed-point; self-hosting (C-free bootstrap fixpoint holds). Compiler (selfhost/): - Math.*: sqrt/sin/cos/tan/atan2/asin/acos (fixed-point runtime prelude — bit-by-bit isqrt, 256-entry interpolated sine table, Ross atan2), plus hypot/dist/dist2/deg_to_rad/rad_to_deg/posmod/wrap/ping_pong/snapped/ move_toward/smoothstep/lerp/remap/sign/floor/ceil/round. - Text.* (complete): upper/lower/trim/repeat/pad, split/join/replace, and the libc-backed queries. - List.* (complete): insert/remove_at/remove/sort plus the earlier ops. - Ease.* (in/out/in_out/back/bounce) and Collide.* (rects/point_rect/ circles/rect_circle). - Phase 3: World/Net/Sys/Save namespaced over the bare builtins (byte- identical IR) and Mem.* (bytes/words/copy/fill/peek/poke). - Screen.* extended (line/circle/fill_circle/triangle/fill_triangle via new runtime primitives; sprite/sprite_scaled aliases), Color.* functions, Random.* (value/int/sign), Time.* (frame/delta/elapsed/now — new game-loop frame counter). - Fix a lexer bug: fixed-point literals with >4 fractional digits overflowed. Docs & tooling: - 129 new per-symbol doc pages; gen.py made data-driven (namespaces discovered from the docs, no hardcoded list); new check-impl.py enforces that every implemented namespace method / keyword / type / phase has a doc page, wired into `x test-tools`. Document the previously-undocumented keywords (break/continue/where/entry/new/public + and/or/not tokens). - LSP: namespaced signature help (ns_method_sig) covering every namespace. Tests: 12 new self-host/regression tests + a golden render for the drawing primitives. All suites green (selfhost 21, regression 45, tools 29). Co-Authored-By: Claude Opus 4.8 --- .gitignore | 6 +- BOOTSTRAP.md | 50 +- COMPILING.md | 49 +- EVENTS-DESIGN.md | 4 +- LANGUAGE.md | 20 +- LIFECYCLE-DESIGN.md | 2 +- LUANTI-ROADMAP.md | 4 +- MOBILE-DESIGN.md | 2 +- NETWORKING-DESIGN.md | 4 +- README.md | 64 +- SCENES-DESIGN.md | 4 +- SYNTAX-REDESIGN.md | 22 +- build-cli.sh | 26 - build.sh | 52 - docs/language/collide/_section.md | 7 + docs/language/collide/collide-circles.md | 22 + docs/language/collide/collide-point_rect.md | 22 + docs/language/collide/collide-rect_circle.md | 22 + docs/language/collide/collide-rects.md | 22 + docs/language/color/_section.md | 7 + docs/language/color/color-darken.md | 24 + docs/language/color/color-lerp.md | 24 + docs/language/color/color-lighten.md | 24 + docs/language/color/color-rgb.md | 24 + docs/language/color/color-rgba.md | 24 + docs/language/color/color-with_alpha.md | 24 + docs/language/control/kw-break.md | 27 + docs/language/control/kw-continue.md | 25 + docs/language/control/kw-where.md | 25 + docs/language/ease/_section.md | 7 + docs/language/ease/ease-back.md | 22 + docs/language/ease/ease-bounce.md | 22 + docs/language/ease/ease-in.md | 22 + docs/language/ease/ease-in_out.md | 22 + docs/language/ease/ease-out.md | 22 + docs/language/list/_section.md | 7 + docs/language/list/list-clear.md | 27 + docs/language/list/list-contains.md | 31 + docs/language/list/list-first.md | 29 + docs/language/list/list-index_of.md | 31 + docs/language/list/list-insert.md | 22 + docs/language/list/list-last.md | 29 + docs/language/list/list-len.md | 27 + docs/language/list/list-pop.md | 29 + docs/language/list/list-push.md | 28 + docs/language/list/list-remove.md | 22 + docs/language/list/list-remove_at.md | 22 + docs/language/list/list-reverse.md | 28 + docs/language/list/list-sort.md | 22 + docs/language/list/list-swap.md | 32 + docs/language/math/_section.md | 7 + docs/language/math/math-abs.md | 28 + docs/language/math/math-acos.md | 22 + docs/language/math/math-asin.md | 22 + docs/language/math/math-atan2.md | 22 + docs/language/math/math-ceil.md | 29 + docs/language/math/math-clamp.md | 31 + docs/language/math/math-cos.md | 22 + docs/language/math/math-deg_to_rad.md | 22 + docs/language/math/math-dist.md | 22 + docs/language/math/math-dist2.md | 23 + docs/language/math/math-floor.md | 29 + docs/language/math/math-hypot.md | 22 + docs/language/math/math-inverse_lerp.md | 31 + docs/language/math/math-lerp.md | 30 + docs/language/math/math-max.md | 28 + docs/language/math/math-min.md | 28 + docs/language/math/math-move_toward.md | 22 + docs/language/math/math-ping_pong.md | 22 + docs/language/math/math-posmod.md | 22 + docs/language/math/math-rad_to_deg.md | 22 + docs/language/math/math-remap.md | 34 + docs/language/math/math-round.md | 27 + docs/language/math/math-sign.md | 28 + docs/language/math/math-sin.md | 22 + docs/language/math/math-smoothstep.md | 22 + docs/language/math/math-snapped.md | 22 + docs/language/math/math-sqrt.md | 22 + docs/language/math/math-tan.md | 22 + docs/language/math/math-wrap.md | 22 + docs/language/mem/_section.md | 7 + docs/language/mem/mem-bytes.md | 14 + docs/language/mem/mem-copy.md | 14 + docs/language/mem/mem-fill.md | 14 + docs/language/mem/mem-peek.md | 14 + docs/language/mem/mem-poke.md | 14 + docs/language/mem/mem-words.md | 14 + docs/language/net/_section.md | 7 + docs/language/net/net-apply.md | 14 + docs/language/net/net-is_owner.md | 14 + docs/language/net/net-is_server.md | 14 + docs/language/net/net-local_id.md | 14 + docs/language/net/net-owner.md | 14 + docs/language/net/net-poll.md | 14 + docs/language/net/net-send.md | 14 + docs/language/net/net-serialize.md | 14 + docs/language/net/net-set_owner.md | 14 + docs/language/operators/op-logical.md | 1 + docs/language/random/random-int.md | 25 + docs/language/random/random-sign.md | 25 + docs/language/random/random-value.md | 25 + docs/language/save/_section.md | 7 + docs/language/save/save-read.md | 14 + docs/language/save/save-write.md | 14 + docs/language/screen/screen-circle.md | 24 + docs/language/screen/screen-fill_circle.md | 24 + docs/language/screen/screen-fill_triangle.md | 24 + docs/language/screen/screen-line.md | 24 + docs/language/screen/screen-sprite.md | 24 + docs/language/screen/screen-sprite_scaled.md | 24 + docs/language/screen/screen-triangle.md | 24 + docs/language/structure/kw-entry.md | 21 + docs/language/structure/kw-new.md | 24 + docs/language/structure/kw-public.md | 23 + docs/language/sys/_section.md | 7 + docs/language/sys/sys-arg.md | 14 + docs/language/sys/sys-arg_count.md | 14 + docs/language/sys/sys-env.md | 14 + docs/language/sys/sys-exit.md | 14 + docs/language/sys/sys-file_close.md | 14 + docs/language/sys/sys-file_open.md | 14 + docs/language/sys/sys-file_read.md | 14 + docs/language/sys/sys-file_seek.md | 14 + docs/language/sys/sys-file_tell.md | 14 + docs/language/sys/sys-file_write.md | 14 + docs/language/sys/sys-read_char.md | 14 + docs/language/sys/sys-run.md | 14 + docs/language/sys/sys-stderr.md | 14 + docs/language/sys/sys-stdout.md | 14 + docs/language/text/_section.md | 7 + docs/language/text/text-char_at.md | 29 + docs/language/text/text-concat.md | 28 + docs/language/text/text-contains.md | 30 + docs/language/text/text-ends_with.md | 28 + docs/language/text/text-equals.md | 31 + docs/language/text/text-from_int.md | 27 + docs/language/text/text-index_of.md | 30 + docs/language/text/text-join.md | 22 + docs/language/text/text-length.md | 27 + docs/language/text/text-lower.md | 22 + docs/language/text/text-pad_left.md | 22 + docs/language/text/text-pad_right.md | 22 + docs/language/text/text-repeat.md | 22 + docs/language/text/text-replace.md | 22 + docs/language/text/text-slice.md | 30 + docs/language/text/text-split.md | 22 + docs/language/text/text-starts_with.md | 30 + docs/language/text/text-to_int.md | 27 + docs/language/text/text-trim.md | 22 + docs/language/text/text-upper.md | 22 + docs/language/time/_section.md | 7 + docs/language/time/time-delta.md | 22 + docs/language/time/time-elapsed.md | 22 + docs/language/time/time-frame.md | 22 + docs/language/time/time-now.md | 22 + docs/language/world/_section.md | 7 + docs/language/world/world-attach.md | 14 + docs/language/world/world-count.md | 14 + docs/language/world/world-detach.md | 14 + docs/language/world/world-field_id.md | 14 + docs/language/world/world-get.md | 14 + docs/language/world/world-has.md | 14 + docs/language/world/world-kind.md | 14 + docs/language/world/world-load.md | 14 + docs/language/world/world-model_id.md | 14 + docs/language/world/world-prop_id.md | 14 + docs/language/world/world-query_next.md | 14 + docs/language/world/world-register_prop.md | 14 + docs/language/world/world-save.md | 14 + docs/language/world/world-set.md | 14 + docs/language/world/world-size.md | 14 + docs/language/world/world-spawn.md | 14 + examples/detach.ludic | 2 +- examples/draw_prims.ludic | 13 + examples/net_demo.ludic | 2 +- examples/reason.ludic | 2 +- examples/rng_demo.ludic | 13 + examples/time_demo.ludic | 11 + runtime/native/core.ludic | 89 + selfhost/bootstrap-cfree.sh | 41 - selfhost/bootstrap.sh | 40 - selfhost/build.sh | 40 - selfhost/compile.sh | 8 - selfhost/emit_collide.ludic | 86 + selfhost/emit_colorfn.ludic | 74 + selfhost/emit_core.ludic | 3 + selfhost/emit_decl.ludic | 3 + selfhost/emit_ease.ludic | 52 + selfhost/emit_ecs.ludic | 1 + selfhost/emit_expr.ludic | 95 + selfhost/emit_game.ludic | 3 + selfhost/emit_head.ludic | 3 + selfhost/emit_list.ludic | 294 + selfhost/emit_math.ludic | 327 +- selfhost/emit_mem.ludic | 48 + selfhost/emit_text.ludic | 558 + selfhost/emit_time.ludic | 26 + selfhost/game-build.sh | 16 - selfhost/golden/draw_prims.ppm | 4 + selfhost/lex.ludic | 10 +- selfhost/ludicc.seed.ll | 24763 +++++++++++----- selfhost/reseed.sh | 27 - selfhost/test.sh | 52 - selfhost/tests/color.ludic | 10 + selfhost/tests/easecollide.ludic | 22 + selfhost/tests/match_bits.ludic | 2 +- selfhost/tests/math.ludic | 27 + selfhost/tests/math2.ludic | 20 + selfhost/tests/math3.ludic | 11 + selfhost/tests/memsys.ludic | 19 + selfhost/tests/textlist.ludic | 44 + selfhost/tests/textlist2.ludic | 41 + selfhost/tests/textsplit.ludic | 17 + test.sh | 238 - tools/build-tools.sh | 70 - tools/docgen/check-impl.py | 160 + tools/docgen/gen.py | 46 +- tools/docgen/inventory.json | 167 +- tools/editors/README.md | 30 +- tools/editors/jetbrains/README.md | 6 +- .../kotlin/io/ludic/ide/LudicConfigurable.kt | 4 +- .../main/kotlin/io/ludic/ide/LudicServer.kt | 4 +- .../src/main/resources/META-INF/plugin.xml | 2 +- tools/editors/vscode/README.md | 6 +- tools/editors/vscode/src/extension.js | 10 +- tools/ludic-tools/lsp.ludic | 206 +- tools/test-lsp.py | 8 +- tools/test-tools.sh | 198 - tools/x/build.ludic | 83 + tools/x/main.ludic | 80 + tools/x/prelude.ludic | 119 + tools/x/selfhost.ludic | 201 + tools/x/selfhost_test.ludic | 68 + tools/x/test.ludic | 143 + tools/x/tools.ludic | 186 + 235 files changed, 24676 insertions(+), 7762 deletions(-) delete mode 100755 build-cli.sh delete mode 100755 build.sh create mode 100644 docs/language/collide/_section.md create mode 100644 docs/language/collide/collide-circles.md create mode 100644 docs/language/collide/collide-point_rect.md create mode 100644 docs/language/collide/collide-rect_circle.md create mode 100644 docs/language/collide/collide-rects.md create mode 100644 docs/language/color/_section.md create mode 100644 docs/language/color/color-darken.md create mode 100644 docs/language/color/color-lerp.md create mode 100644 docs/language/color/color-lighten.md create mode 100644 docs/language/color/color-rgb.md create mode 100644 docs/language/color/color-rgba.md create mode 100644 docs/language/color/color-with_alpha.md create mode 100644 docs/language/control/kw-break.md create mode 100644 docs/language/control/kw-continue.md create mode 100644 docs/language/control/kw-where.md create mode 100644 docs/language/ease/_section.md create mode 100644 docs/language/ease/ease-back.md create mode 100644 docs/language/ease/ease-bounce.md create mode 100644 docs/language/ease/ease-in.md create mode 100644 docs/language/ease/ease-in_out.md create mode 100644 docs/language/ease/ease-out.md create mode 100644 docs/language/list/_section.md create mode 100644 docs/language/list/list-clear.md create mode 100644 docs/language/list/list-contains.md create mode 100644 docs/language/list/list-first.md create mode 100644 docs/language/list/list-index_of.md create mode 100644 docs/language/list/list-insert.md create mode 100644 docs/language/list/list-last.md create mode 100644 docs/language/list/list-len.md create mode 100644 docs/language/list/list-pop.md create mode 100644 docs/language/list/list-push.md create mode 100644 docs/language/list/list-remove.md create mode 100644 docs/language/list/list-remove_at.md create mode 100644 docs/language/list/list-reverse.md create mode 100644 docs/language/list/list-sort.md create mode 100644 docs/language/list/list-swap.md create mode 100644 docs/language/math/_section.md create mode 100644 docs/language/math/math-abs.md create mode 100644 docs/language/math/math-acos.md create mode 100644 docs/language/math/math-asin.md create mode 100644 docs/language/math/math-atan2.md create mode 100644 docs/language/math/math-ceil.md create mode 100644 docs/language/math/math-clamp.md create mode 100644 docs/language/math/math-cos.md create mode 100644 docs/language/math/math-deg_to_rad.md create mode 100644 docs/language/math/math-dist.md create mode 100644 docs/language/math/math-dist2.md create mode 100644 docs/language/math/math-floor.md create mode 100644 docs/language/math/math-hypot.md create mode 100644 docs/language/math/math-inverse_lerp.md create mode 100644 docs/language/math/math-lerp.md create mode 100644 docs/language/math/math-max.md create mode 100644 docs/language/math/math-min.md create mode 100644 docs/language/math/math-move_toward.md create mode 100644 docs/language/math/math-ping_pong.md create mode 100644 docs/language/math/math-posmod.md create mode 100644 docs/language/math/math-rad_to_deg.md create mode 100644 docs/language/math/math-remap.md create mode 100644 docs/language/math/math-round.md create mode 100644 docs/language/math/math-sign.md create mode 100644 docs/language/math/math-sin.md create mode 100644 docs/language/math/math-smoothstep.md create mode 100644 docs/language/math/math-snapped.md create mode 100644 docs/language/math/math-sqrt.md create mode 100644 docs/language/math/math-tan.md create mode 100644 docs/language/math/math-wrap.md create mode 100644 docs/language/mem/_section.md create mode 100644 docs/language/mem/mem-bytes.md create mode 100644 docs/language/mem/mem-copy.md create mode 100644 docs/language/mem/mem-fill.md create mode 100644 docs/language/mem/mem-peek.md create mode 100644 docs/language/mem/mem-poke.md create mode 100644 docs/language/mem/mem-words.md create mode 100644 docs/language/net/_section.md create mode 100644 docs/language/net/net-apply.md create mode 100644 docs/language/net/net-is_owner.md create mode 100644 docs/language/net/net-is_server.md create mode 100644 docs/language/net/net-local_id.md create mode 100644 docs/language/net/net-owner.md create mode 100644 docs/language/net/net-poll.md create mode 100644 docs/language/net/net-send.md create mode 100644 docs/language/net/net-serialize.md create mode 100644 docs/language/net/net-set_owner.md create mode 100644 docs/language/random/random-int.md create mode 100644 docs/language/random/random-sign.md create mode 100644 docs/language/random/random-value.md create mode 100644 docs/language/save/_section.md create mode 100644 docs/language/save/save-read.md create mode 100644 docs/language/save/save-write.md create mode 100644 docs/language/screen/screen-circle.md create mode 100644 docs/language/screen/screen-fill_circle.md create mode 100644 docs/language/screen/screen-fill_triangle.md create mode 100644 docs/language/screen/screen-line.md create mode 100644 docs/language/screen/screen-sprite.md create mode 100644 docs/language/screen/screen-sprite_scaled.md create mode 100644 docs/language/screen/screen-triangle.md create mode 100644 docs/language/structure/kw-entry.md create mode 100644 docs/language/structure/kw-new.md create mode 100644 docs/language/structure/kw-public.md create mode 100644 docs/language/sys/_section.md create mode 100644 docs/language/sys/sys-arg.md create mode 100644 docs/language/sys/sys-arg_count.md create mode 100644 docs/language/sys/sys-env.md create mode 100644 docs/language/sys/sys-exit.md create mode 100644 docs/language/sys/sys-file_close.md create mode 100644 docs/language/sys/sys-file_open.md create mode 100644 docs/language/sys/sys-file_read.md create mode 100644 docs/language/sys/sys-file_seek.md create mode 100644 docs/language/sys/sys-file_tell.md create mode 100644 docs/language/sys/sys-file_write.md create mode 100644 docs/language/sys/sys-read_char.md create mode 100644 docs/language/sys/sys-run.md create mode 100644 docs/language/sys/sys-stderr.md create mode 100644 docs/language/sys/sys-stdout.md create mode 100644 docs/language/text/_section.md create mode 100644 docs/language/text/text-char_at.md create mode 100644 docs/language/text/text-concat.md create mode 100644 docs/language/text/text-contains.md create mode 100644 docs/language/text/text-ends_with.md create mode 100644 docs/language/text/text-equals.md create mode 100644 docs/language/text/text-from_int.md create mode 100644 docs/language/text/text-index_of.md create mode 100644 docs/language/text/text-join.md create mode 100644 docs/language/text/text-length.md create mode 100644 docs/language/text/text-lower.md create mode 100644 docs/language/text/text-pad_left.md create mode 100644 docs/language/text/text-pad_right.md create mode 100644 docs/language/text/text-repeat.md create mode 100644 docs/language/text/text-replace.md create mode 100644 docs/language/text/text-slice.md create mode 100644 docs/language/text/text-split.md create mode 100644 docs/language/text/text-starts_with.md create mode 100644 docs/language/text/text-to_int.md create mode 100644 docs/language/text/text-trim.md create mode 100644 docs/language/text/text-upper.md create mode 100644 docs/language/time/_section.md create mode 100644 docs/language/time/time-delta.md create mode 100644 docs/language/time/time-elapsed.md create mode 100644 docs/language/time/time-frame.md create mode 100644 docs/language/time/time-now.md create mode 100644 docs/language/world/_section.md create mode 100644 docs/language/world/world-attach.md create mode 100644 docs/language/world/world-count.md create mode 100644 docs/language/world/world-detach.md create mode 100644 docs/language/world/world-field_id.md create mode 100644 docs/language/world/world-get.md create mode 100644 docs/language/world/world-has.md create mode 100644 docs/language/world/world-kind.md create mode 100644 docs/language/world/world-load.md create mode 100644 docs/language/world/world-model_id.md create mode 100644 docs/language/world/world-prop_id.md create mode 100644 docs/language/world/world-query_next.md create mode 100644 docs/language/world/world-register_prop.md create mode 100644 docs/language/world/world-save.md create mode 100644 docs/language/world/world-set.md create mode 100644 docs/language/world/world-size.md create mode 100644 docs/language/world/world-spawn.md create mode 100644 examples/draw_prims.ludic create mode 100644 examples/rng_demo.ludic create mode 100644 examples/time_demo.ludic delete mode 100755 selfhost/bootstrap-cfree.sh delete mode 100755 selfhost/bootstrap.sh delete mode 100755 selfhost/build.sh delete mode 100755 selfhost/compile.sh create mode 100644 selfhost/emit_collide.ludic create mode 100644 selfhost/emit_colorfn.ludic create mode 100644 selfhost/emit_ease.ludic create mode 100644 selfhost/emit_list.ludic create mode 100644 selfhost/emit_mem.ludic create mode 100644 selfhost/emit_text.ludic create mode 100644 selfhost/emit_time.ludic delete mode 100755 selfhost/game-build.sh create mode 100644 selfhost/golden/draw_prims.ppm delete mode 100755 selfhost/reseed.sh delete mode 100755 selfhost/test.sh create mode 100644 selfhost/tests/color.ludic create mode 100644 selfhost/tests/easecollide.ludic create mode 100644 selfhost/tests/math.ludic create mode 100644 selfhost/tests/math2.ludic create mode 100644 selfhost/tests/math3.ludic create mode 100644 selfhost/tests/memsys.ludic create mode 100644 selfhost/tests/textlist.ludic create mode 100644 selfhost/tests/textlist2.ludic create mode 100644 selfhost/tests/textsplit.ludic delete mode 100755 test.sh delete mode 100755 tools/build-tools.sh create mode 100644 tools/docgen/check-impl.py delete mode 100755 tools/test-tools.sh create mode 100644 tools/x/build.ludic create mode 100644 tools/x/main.ludic create mode 100644 tools/x/prelude.ludic create mode 100644 tools/x/selfhost.ludic create mode 100644 tools/x/selfhost_test.ludic create mode 100644 tools/x/test.ludic create mode 100644 tools/x/tools.ludic diff --git a/.gitignore b/.gitignore index 0cf53512..e5eba8b0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,9 @@ build **.zip out.ppm -# self-hosted front-end binaries (built by ./build-cli.sh) and their output -/ludic -/ludicc +# the toolchain binaries (ludicc, ludic, x, ludic-fmt, ludic-lsp) — all built +# into bin/ by the one-line bootstrap + `bin/x build`; never checked in. The +# only thing published is the source and the LLVM-IR seed (selfhost/ludicc.seed.ll). /bin/ # editor toolchain build artifacts diff --git a/BOOTSTRAP.md b/BOOTSTRAP.md index 377d36ae..cc3b772f 100644 --- a/BOOTSTRAP.md +++ b/BOOTSTRAP.md @@ -385,7 +385,7 @@ are in the appendix under "Syntax audit". ordering constraint, not a preference. Today, changing the grammar costs: edit `ludicc.c`, `sed` three examples and -five runtime files, run `./test.sh`. An afternoon. +five runtime files, run `bin/x test`. An afternoon. After the fixpoint, `ludicc` is *written in the syntax it parses*. Every change becomes a four-step dance: build a compiler that accepts both old and new forms @@ -485,7 +485,7 @@ stray `&`; `and`/`or` became reserved words, so `let and = 5` is rejected at the mistake; the AST op string is now `"and"`/`"or"`, which is **exactly the LLVM opcode**, so the lowering ternary collapsed to passing `op` straight through; and `--fmt` emits the new spelling for free, since it prints the op string. -Six regression tests in `test.sh` (64 → 70), including one asserting no `.ludic` +Six regression tests in `bin/x test` (64 → 70), including one asserting no `.ludic` source uses the symbols outside a comment. *Fixed R3.* **S4. Reserve every keyword.** One table, shared by the lexer, parser, @@ -531,7 +531,7 @@ file, and give every diagnostic a stable code plus a one-line suggested fix (`ludicc --explain L0412`). Feeds the LSP, the docs and any model at once. *Cost:* ~250 lines. *Defer to after the fixpoint* — valuable, not ordering-critical. -**S9. Documentation hygiene as a build step.** `test.sh` already understands +**S9. Documentation hygiene as a build step.** `bin/x test` already understands ` ```ludic ` fences. Extend it so **every fence in every `.md` must compile**, and fix R10's stale claims. *Cost:* ~60 lines of shell. Do this early — it is cheap and it stops the docs drifting further while the rest of the work lands. @@ -572,14 +572,24 @@ now `and`, `or`, `not`, all reserved words, with no symbol spellings at all. ## 5.7 Status — self-hosting achieved -Updated 2026-08-27. `./test.sh` = 93/93, `./tools/test-tools.sh` = 28/28, -`./selfhost/test.sh` = 5/5 including the bootstrap fixpoint. +Updated 2026-08-27. `bin/x test` = 93/93, `bin/x test-tools` = 28/28, +`bin/x selfhost-test` = 5/5 including the bootstrap fixpoint. **Ludic is fully self-hosted.** The compiler is written in Ludic (`selfhost/*.ludic`, ~2,400 lines), compiles every example to byte-identical output and its own source to a fixpoint, and is built from a checked-in IR seed -with **no C compiler** — the former C compiler has been deleted. Run -`./selfhost/bootstrap-cfree.sh`. +with **no C compiler** — the former C compiler has been deleted. + +From a clean checkout, build the compiler and the task-runner in one line: + +```bash +clang selfhost/ludicc.seed.ll -o bin/ludicc && bin/ludicc tools/x/main.ludic -o bin/x +``` + +Thereafter `bin/x build` rebuilds the entire toolchain into `bin/` (`ludicc`, +`ludic`, `x`, `ludic-fmt`, `ludic-lsp`), `bin/x bootstrap-cfree` reproduces the +compiler from the seed with no C compiler, and `bin/x help` lists every command. +Run `bin/x` from the repository root. | Stage | What | State | |---|---|---| @@ -589,7 +599,7 @@ with **no C compiler** — the former C compiler has been deleted. Run | **1** | support libraries in Ludic (`str`, `buf`, `io`) | ✅ done | | **2** | the compiler ported to Ludic (`lex`, `parse`, `emit_*`) | ✅ done | | **3** | the fixpoint (`gen2.ll == gen3.ll`) | ✅ done | -| **4** | retire the C as a *live dependency* (IR seed, C-free rebuild) | ✅ done — `selfhost/bootstrap-cfree.sh` | +| **4** | retire the C as a *live dependency* (IR seed, C-free rebuild) | ✅ done — `bin/x bootstrap-cfree` | | **4+** | retire `ludicc.c` entirely (port the game backend) | ✅ **done** — `compiler/` deleted; the compiler is `selfhost/*.ludic` | ### What "self-hosting" means here, precisely @@ -603,7 +613,7 @@ fixed-point. It targets native (macOS/clang) and emits LLVM IR text that clang assembles, exactly the posture the C `ludicc` has. It is written entirely in that subset, which is why it compiles itself. The -three-generation proof (`selfhost/bootstrap.sh`): +three-generation proof (`bin/x bootstrap`): ``` stage0 build/ludicc (C) compiles selfhost.ludic -> gen1 (a Ludic-written compiler) @@ -622,11 +632,11 @@ binaries that produce the expected output. The self-hosted compiler no longer needs the C `ludicc` to exist. Its own LLVM IR is checked in as `selfhost/ludicc.seed.ll` — a proven fixed point — and -`selfhost/bootstrap-cfree.sh` assembles that with clang (an IR assembler, the +`bin/x bootstrap-cfree` assembles that with clang (an IR assembler, the floor Rust and Swift stand on) and rebuilds the compiler, which reproduces its own IR. **The C source is never invoked.** This is the seed path §8 recommended. -Crucially, the compiler **evolves** without the C compiler: `selfhost/reseed.sh` +Crucially, the compiler **evolves** without the C compiler: `bin/x reseed` uses the *current* seed to build a compiler with new source, then takes that compiler's own output as the new seed. New features (this session: `match`, bitwise ops, `peek32`/`poke32`) landed and reseeded entirely C-free. The C @@ -644,14 +654,14 @@ It now compiles **every example** — `snake`, `menu`, and the 6-file JRPG `chronorift` — to output byte-identical to the original C compiler (checked against golden renders in `selfhost/golden/`), and still compiles its own source to a fixpoint. The C compiler (`compiler/`, ~2,700 lines) has been **deleted**. -`build.sh` builds `build/ludicc` from the IR seed with clang and drives the -native link (headless, or windowed via `cocoa.ll`). +`bin/x build` builds `bin/ludicc` from the IR seed with clang, and `bin/x app` +drives the native link (headless, or windowed via `cocoa.ll`). What did not come across: the old C driver's **wasm target, cross-compilation, and shared-library** paths. Those are driver features, not codegen — the self-host compiler emits native-ABI IR — and re-implementing them on the self-hosted toolchain (wasm needs i32 `size_t`; the others are clang flags in -`build.sh`) is the remaining follow-up. +the `bin/x app` build path) is the remaining follow-up. --- @@ -668,7 +678,7 @@ this order — cheapest-and-unblocking first: 4. **A6** `file_stderr` (~40). 5. **A2 + A3** `struct` + arrays (~400, landed together). -Each gets a test in `test.sh` as it lands. The suite is at 64/64; Stage 0 should +Each gets a test in `bin/x test` as it lands. The suite is at 64/64; Stage 0 should leave it green and larger. **Explicitly not in Stage 0:** function pointers, 64-bit ints, a `tool` entry @@ -711,8 +721,8 @@ internals. | Sub-stage | Port | Differential oracle | |---|---|---| | 2a | `lex.ludic` | Dump the token stream from both compilers; `diff` over every `.ludic` in the tree. | -| 2b | `parse.ludic` (AST) | **`--fmt` is a free oracle.** The formatter is already a canonical AST printer, and `test.sh` already asserts formatting never changes a program. If both compilers' `--fmt` output is byte-identical on every file, the parsers agree. | -| 2c | `check.ludic` | Diagnostic text must match on a corpus of deliberately-broken programs. `test.sh` already checks diagnostics — extend that corpus. | +| 2b | `parse.ludic` (AST) | **`--fmt` is a free oracle.** The formatter is already a canonical AST printer, and `bin/x test` already asserts formatting never changes a program. If both compilers' `--fmt` output is byte-identical on every file, the parsers agree. | +| 2c | `check.ludic` | Diagnostic text must match on a corpus of deliberately-broken programs. `bin/x test` already checks diagnostics — extend that corpus. | | 2d | `emit.ludic` (IR) | **`--emit llvm` must be byte-identical** for every example. This is the strongest oracle available: pass/fail on exact text, no judgement. | | 2e | `drive.ludic` | Assemble and link via `clang`; compare final binaries. | @@ -823,7 +833,7 @@ existing framing ("the same floor Rust and Swift stand on") already covers it. | 0.5 | `and`/`or`/`not` + short-circuit; doc checking (S9) | ✅ done (S1/S2/S4/S5/S6/S7 deferred — full-language polish) | | 1 | `str`, `buf`, `io` support libraries in Ludic | ✅ done (`selfhost/`) | | 2 | lexer + parser + AST + IR emitter, in Ludic | ✅ done (`selfhost/`, ~1,300 lines) | -| 3 | the fixpoint (`gen2.ll == gen3.ll`) + harness | ✅ done (`selfhost/bootstrap.sh`) | +| 3 | the fixpoint (`gen2.ll == gen3.ll`) + harness | ✅ done (`bin/x bootstrap`) | | 4 | port the game backend, retire `ludicc.c` | â›” out of scope — mechanical continuation | The self-host compiler is **~1,300 lines of Ludic** covering the compiler-subset. @@ -847,8 +857,8 @@ exist. ## Appendix — probe programs -Each was compiled with `./build.sh probe.ludic --headless` and run against the -current tree (`./test.sh` = 64/64). +Each was compiled with `bin/x app probe.ludic --headless` and run against the +current tree (`bin/x test` = 64/64). **Recursion** ✅ → `55` ```ludic diff --git a/COMPILING.md b/COMPILING.md index 312f95e1..2a3d0f6d 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -6,24 +6,31 @@ > unchanged. `ludicc` now drives clang itself (via an `os_system` intrinsic), so > `ludicc app.ludic -o bin/app` and `--emit-llvm` work directly, and a sibling > command `ludic app.ludic` compiles to a temporary binary and runs it in one -> step. Build both with `./build-cli.sh`. `build.sh` remains as a convenience -> wrapper. `--fmt` is reimplemented as a lex+parse gate (the doc-check hook). -> The `--target`/cross-compile and `--shared` paths are still features of the old -> C driver not yet re-implemented on the self-hosted toolchain. See -> BOOTSTRAP.md §5.7. +> step. The whole toolchain is built by `bin/x build`; `bin/x app` remains as a +> convenience wrapper over the compiler. `--fmt` is reimplemented as a lex+parse +> gate (the doc-check hook). The `--target`/cross-compile and `--shared` paths are +> still features of the old C driver not yet re-implemented on the self-hosted +> toolchain. See BOOTSTRAP.md §5.7. +> +> From a clean checkout, build the compiler and the task-runner in one line, then +> let `bin/x` do the rest (run it from the repository root): > > ```bash -> ./build-cli.sh # build ./ludicc and ./ludic (from the seed) -> ./ludicc examples/snake.ludic -o bin/snake # compile -> ./ludic examples/snake.ludic # compile + run +> # one-time bootstrap: clang assembles the seed, then ludicc compiles bin/x +> clang selfhost/ludicc.seed.ll -o bin/ludicc && bin/ludicc tools/x/main.ludic -o bin/x +> bin/x build # rebuild the whole toolchain into bin/ +> # (ludicc, ludic, x, ludic-fmt, ludic-lsp) +> bin/ludicc examples/snake.ludic -o bin/snake # compile +> bin/ludic examples/snake.ludic # compile + run +> bin/x help # list every command > ``` > > The binaries are multi-call (one native binary under two names): invoked as > `ludicc` it compiles, as `ludic` it compiles-and-runs. A `.ludic` file with > systems is a game and links windowed by default; `--headless` and `--windowed` > force the mode. The runtime (`runtime/native/cocoa.ll`) is found via -> `$LUDIC_HOME`, defaulting to the directory the binary sits in — keep them at the -> repo root, or set `LUDIC_HOME` and put them on `PATH`. `$LUDIC_CC` overrides the +> `$LUDIC_HOME`, defaulting to the directory the binary sits in — keep them in +> `bin/`, or set `LUDIC_HOME` and put them on `PATH`. `$LUDIC_CC` overrides the > assembler/linker (default `clang`). @@ -66,15 +73,19 @@ the old C driver and are **not yet re-implemented** on the self-hosted toolchain (see the note at the top). The rows above the line work today via the self-hosted `ludicc`. -`build.sh` wraps the common cases: +`bin/x app` wraps the common cases: ```bash -./build.sh examples/snake.ludic # -> build/snake (native) -./build.sh examples/lib/combat.ludic --lib # -> build/libcombat.* (library) -./build.sh examples/snake.ludic --headless # -> build/snake_headless (out.ppm) -./build.sh examples/snake.ludic --web # -> build/web/ (browser) +bin/x app examples/snake.ludic # -> build/snake (native) +bin/x app examples/lib/combat.ludic --lib # -> build/libcombat.* (library) +bin/x app examples/snake.ludic --headless # -> build/snake_headless (out.ppm) +bin/x app examples/snake.ludic --web # -> build/web/ (browser) ``` +The `--lib` and `--web` targets were part of the old C driver and are **not yet +re-implemented** on the self-hosted toolchain — `bin/x app` supports the native +windowed and `--headless` builds today. + ## Programs and libraries > **Not yet on the self-hosted toolchain.** `--shared` and the `nm`/library @@ -208,7 +219,7 @@ only the triple changes. ``` ```bash -./build.sh examples/chronorift.ludic --web +bin/x app examples/chronorift.ludic --web python3 -m http.server -d build/web 8000 # then open http://localhost:8000/ ``` @@ -296,7 +307,7 @@ node tools/ludic-web/run.mjs build/web/snake_headless.wasm --stdin=ddss ``` Because Ludic is fixed-point and its RNG is seeded, the native headless binary -and the wasm one must render byte-identical frames from the same input. `test.sh` +and the wasm one must render byte-identical frames from the same input. `bin/x test` asserts exactly that, which is a much stronger check on the backend than "it started". @@ -310,13 +321,13 @@ entity allocator, save/load snapshots, the frame loop, the window, and the whole graphics stack — framebuffer, PNG decoding, sprites, 9-slice, TrueType text and the retained UI. -None of it goes through C. `./test.sh` asserts that directly: no C source +None of it goes through C. `bin/x test` asserts that directly: no C source survives in `runtime/`, no C emitter survives in `ludicc`, and the examples all build, run and render from IR alone. ## Every flag -The self-hosted `ludicc`/`ludic` (built with `./build-cli.sh`) accept: +The self-hosted `ludicc`/`ludic` (built with `bin/x build-cli`) accept: ``` the program to compile (first non-flag argument) diff --git a/EVENTS-DESIGN.md b/EVENTS-DESIGN.md index 2d5436c9..a7d09c25 100644 --- a/EVENTS-DESIGN.md +++ b/EVENTS-DESIGN.md @@ -2,7 +2,7 @@ > **Status: EV0 fully shipped; EV1 (spawn/despawn), EV2 (first cut) and EV3 > shipped; EV4–EV7 are design.** Implemented, self-hosted to the C-free fixpoint, -> and each a `test.sh` check: +> and each a `bin/x test` check: > - **EV0** — `event`/`@On`/`emit` lowered to `@ev_` dispatch (compile-time > listeners), **plus the foreign C ABI** (`ludic_on_`, the `%Ev_` payload > struct, a fixed-capacity listener array), proven by a C mod in @@ -566,7 +566,7 @@ work (and how LIFECYCLE/SCENES sequence). `N_EVENT`/`S_EMIT`; `parse_event` + `@On` annotation + `emit` statement (guarded by an identifier-lookahead so a bare `emit(...)` call still parses); registries `g_events`/`g_onlisten` (emit_core); `emit_event_fns` (emit_game); `emit_emit` - (emit_stmt). [`examples/events.ludic`](examples/events.ludic) is a `test.sh` check. + (emit_stmt). [`examples/events.ludic`](examples/events.ludic) is a `bin/x test` check. - **EV1 — `@Public` hook promotion.** ✅ *All scopes shipped.* `@Public` on a lifecycle hook fires a public event at that hook's site (payload: entity, plus `EndReason` for despawn); `find_event(name)` doubles as the "is this hook diff --git a/LANGUAGE.md b/LANGUAGE.md index d2362d9f..232bbb22 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -752,16 +752,16 @@ ludic app.ludic # compile AND run (forwards the exit code ``` `ludicc` (compile) and `ludic` (compile-and-run) are one multi-call binary built -by `./build-cli.sh`. **[COMPILING.md](COMPILING.md) is the authoritative CLI +by `bin/x build-cli`. **[COMPILING.md](COMPILING.md) is the authoritative CLI reference** — the full flag set (`-o`, `--windowed`, `--headless`, `--emit-llvm`, `--save-temps`, `--run`), the `LUDIC_HOME` / `LUDIC_CC` environment variables, and the IR-to-stdout bootstrap contract (no `-o`, invoked as `ludicc`) that -`build.sh` / `reseed.sh` rely on. The default mode is auto: a file with `handler`s +`bin/x app` / `bin/x reseed` rely on. The default mode is auto: a file with `handler`s links windowed, otherwise headless; an explicit flag always wins. The retired C driver's `--shared`, `--fmt`, `-c`, cross-compile (`--target`) and wasm modes are **not** on the self-hosted toolchain (see "Not yet implemented"). -Source formatting now lives in the standalone `build/ludic-fmt` (below), not a +Source formatting now lives in the standalone `bin/ludic-fmt` (below), not a compiler flag. The self-hosted compiler is intentionally permissive: it has no separate @@ -773,10 +773,10 @@ duplicate types, unknown fields, arity) are future work. ### Editors ```bash -./tools/build-tools.sh # -> build/ludic-fmt, build/ludic-lsp -build/ludic-fmt -w src/ # format in place (keeps comments) -build/ludic-fmt --check . # CI: exit 1 if anything is unformatted -build/ludic-lsp --stdio # the language server, for any editor +bin/x tools # -> bin/ludic-fmt, bin/ludic-lsp +bin/ludic-fmt -w src/ # format in place (keeps comments) +bin/ludic-fmt --check . # CI: exit 1 if anything is unformatted +bin/ludic-lsp --stdio # the language server, for any editor ``` `ludic-fmt` is the source formatter: it works on tokens, so comments and blank @@ -800,7 +800,7 @@ Emacs, Sublime and Zed, are in `tools/editors/` — see - `examples/snake.ludic` — Snake, no assets — same compiler, proving generality. ```bash -./build.sh examples/snake.ludic && ./build/snake +bin/x app examples/snake.ludic && ./build/snake ``` ## Not yet implemented @@ -815,7 +815,7 @@ are future work. slices; fixed inline arrays are not accepted yet. Use `[]T` slices. - **CLI: `--shared`, `--fmt`, and the wasm/cross target** — these were features of the retired C driver; the self-hosted `ludicc` does not carry them (source - formatting lives in `build/ludic-fmt` instead). Output-path and IR flags are in + formatting lives in `bin/ludic-fmt` instead). Output-path and IR flags are in flux as the CLI front-end is rebuilt — check `ludicc` usage for the current set. Records (`property` used with `new`) and array types, `break`/`continue`, and @@ -827,7 +827,7 @@ self-hosting; their lowerings are in > **Implemented (S0).** `scene`, `layer`, and the `on enter` / `on exit` hooks > compile; [`examples/scenes.ludic`](examples/scenes.ludic) runs and is checked -> by `test.sh`. A scene lowers to a `machine` the compiler writes for you: one +> by `bin/x test`. A scene lowers to a `machine` the compiler writes for you: one > implicit active-scene register, states numbered by declaration order, and > `become` as two direct calls plus a store. Richer scene features (the overlay > stack, scene-owned entities, scene-local state, transition parameters) are diff --git a/LIFECYCLE-DESIGN.md b/LIFECYCLE-DESIGN.md index 21e920d9..4a2ab2e3 100644 --- a/LIFECYCLE-DESIGN.md +++ b/LIFECYCLE-DESIGN.md @@ -3,7 +3,7 @@ > **Status: LC0–LC1 shipped; LC2–LC6 are design.** The structural attach/detach > pair and `@OnDetach` (§4, LC0), and reason-carrying `@OnDespawn` (§5, LC1), are > implemented and tested ([`examples/detach.ludic`](examples/detach.ludic), -> [`examples/reason.ludic`](examples/reason.ludic), `test.sh` checks). The +> [`examples/reason.ludic`](examples/reason.ludic), `bin/x test` checks). The > extensions LC2–LC6 are research-informed proposals, not built. This document > distills a survey of lifecycle models across seven systems (§3) into a roadmap > for Ludic. §13 lists the open decisions. diff --git a/LUANTI-ROADMAP.md b/LUANTI-ROADMAP.md index 6121ad17..12d3da6f 100644 --- a/LUANTI-ROADMAP.md +++ b/LUANTI-ROADMAP.md @@ -11,7 +11,7 @@ threads + sockets + a GPU) are load-bearing for everything above them. This document is written against evidence, not memory: `luanti-org/luanti` at `main` was cloned and read, and every claim about Ludic below was verified against `compiler/ludicc.c` / `compiler/native.c` or by compiling a probe -program with `build/ludicc`. +program with `bin/ludicc`. --- @@ -1246,7 +1246,7 @@ process that reads it back — proving the thread pool, the compressor and the round-trip. **Note on the new WASM target.** A peer session just landed WebAssembly support -(`runtime/web/`, `test.sh` now 64/64), and `@main` is now split into +(`runtime/web/`, `bin/x test` now 64/64), and `@main` is now split into `ludic_boot/frame/alive/teardown` so a browser can drive the loop from `requestAnimationFrame`. Two consequences for this roadmap: (a) threads on wasm32 mean Web Workers + SharedArrayBuffer, not pthreads, so **G-17 needs a diff --git a/MOBILE-DESIGN.md b/MOBILE-DESIGN.md index 79064b39..d470fc1f 100644 --- a/MOBILE-DESIGN.md +++ b/MOBILE-DESIGN.md @@ -289,7 +289,7 @@ Each is independently shippable and testable, matching how the repo phases work. - **M0 — target axis** (M1) + **revive the OS-owned loop** (M2). *Do these first and together* — they're the shared compiler plumbing, they un-break the existing - web target (proving the frame-loop split against `run.mjs`/`test.sh` before any + web target (proving the frame-loop split against `run.mjs`/`bin/x test` before any mobile SDK is involved), and they need no mobile toolchain. This is the floor. - **M1 — iOS simulator, framebuffer-as-texture** (M3 iOS shim + M4.1). First pixels on a phone, GL/Metal binding proven, no signing/device friction yet. diff --git a/NETWORKING-DESIGN.md b/NETWORKING-DESIGN.md index e04060e9..71a03e23 100644 --- a/NETWORKING-DESIGN.md +++ b/NETWORKING-DESIGN.md @@ -4,12 +4,12 @@ > and — unlike the original N0/N1 which linked C hosts — every phase now runs as a > self-contained **pure-Ludic** program (no `.c`, no foreign host): a built-in > loopback transport fills the seam, and each `examples/net_*.ludic` drives and -> asserts itself from its own `entry`. See `test.sh` (checks `net_echo` … `net_demo`) +> asserts itself from its own `entry`. See `bin/x test` (checks `net_echo` … `net_demo`) > and `examples/net_demo.ludic` for a full RPC→authority→replicate→reconcile loop. > clang remains only as the LLVM-IR assembler/linker (no C is compiled), the floor > Rust and Swift stand on. > -> _Historical note:_ **N0 + N1 shipped first; N2–N6 were design.** Two phases landed as `test.sh` +> _Historical note:_ **N0 + N1 shipped first; N2–N6 were design.** Two phases landed as `bin/x test` > checks. **N0 (transport seam):** `extern fn` now lowers end to end — a direct > `@` call plus a `declare`, no networking logic in the compiler — so the whole > transport is two externs (`net_send`/`net_poll`) a host fills. Proven by diff --git a/README.md b/README.md index 3b7f3b16..44d096e1 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ compiler intrinsics, the same floor Rust and Swift stand on. lexer, parser and LLVM-IR backend — that compiles every example (including the 6-file JRPG) to the byte-exact same binary the original C compiler produced, and compiles **its own source** to a fixpoint. It is built from a checked-in IR seed -(`selfhost/ludicc.seed.ll`) with clang alone; run `./selfhost/bootstrap-cfree.sh` +(`selfhost/ludicc.seed.ll`) with clang alone; run `bin/x bootstrap-cfree` to rebuild it with no C compiler in the loop. The former C compiler is gone. Neither the compiler nor the games are C. Beneath both sits only the platform's @@ -35,8 +35,8 @@ self-hosted native toolchain.) | Path | What it is | |------|-----------| -| `selfhost/*.ludic` | **the compiler, written in Ludic** — lexer, parser, and the LLVM-IR backend (ECS storage, queries, spawn, `match`/`machine`, UI, scenes, save/load, fixed-point). Concatenated by `selfhost/build.sh`; built from `selfhost/ludicc.seed.ll` | -| `selfhost/bootstrap-cfree.sh` | rebuild the compiler from the IR seed with **no C compiler**, and prove it reproduces its own IR | +| `selfhost/*.ludic` | **the compiler, written in Ludic** — lexer, parser, and the LLVM-IR backend (ECS storage, queries, spawn, `match`/`machine`, UI, scenes, save/load, fixed-point). Concatenated by `bin/x selfhost-build`; built from `selfhost/ludicc.seed.ll` | +| `tools/x/*.ludic` | **the task runner, written in Ludic** — one binary (`bin/x`) that builds, tests, bootstraps and reseeds the whole project, replacing every shell script. `bin/x bootstrap-cfree` rebuilds the compiler from the IR seed with **no C compiler** and proves it reproduces its own IR | | `runtime/native/core.ludic` | the runtime written *in Ludic* for the native path (framebuffer, text, registers, RNG, input) | | `COMPILING.md` | the native pipeline: `ludicc → LLVM IR → exe/dylib`, `module`/`export`, cross-compilation, `rt_*` intrinsics | | `runtime/native/image.ludic` | PNG decoding, images, sprites, alpha blending and 9-slice — in Ludic | @@ -51,58 +51,50 @@ self-hosted native toolchain.) | `examples/chronorift.ludic` | the JRPG written in Ludic (multi-file via `import`, model-based) | | `examples/menu.ludic` | a retained-UI title screen (9-slice, TrueType, focusable buttons) | | `examples/snake.ludic` | a second, unrelated game — proves the language is general (same toolchain, no engine hardcoding) | -| `build.sh` | `./build.sh examples/.ludic` | -| `test.sh` | regression suite: builds the compiler, compiles/runs all examples, checks save/load + diagnostics (`./test.sh`) | -| `tools/ludic-tools/` | the editor toolchain, in C: `ludic-fmt` (source formatter) and `ludic-lsp` (language server) — one lexer and one vocabulary shared by both | +| `bin/x` | the task runner — `bin/x app examples/.ludic` compiles a program; `bin/x help` lists every command | +| `bin/x test` | regression suite: builds the compiler, compiles/runs all examples, checks save/load + diagnostics | +| `tools/ludic-tools/` | the editor toolchain, **in Ludic**: `ludic-fmt` (source formatter) and `ludic-lsp` (language server) — one lexer and one vocabulary shared by both | | `tools/editors/` | plugins for VS Code and JetBrains, plus configuration for Neovim, Helix, Emacs, Sublime and Zed ([README](tools/editors/README.md)) | -| `tools/test-tools.sh` | regression suite for the toolchain: proves formatting never changes a program, drives the language server over real LSP traffic | +| `bin/x test-tools` | regression suite for the toolchain: proves formatting never changes a program, drives the language server over real LSP traffic | ## Build & run -`ludicc` compiles Ludic straight to machine code via LLVM IR. See -**[COMPILING.md](COMPILING.md)** for the pipeline, shared libraries -(`--shared`), cross-compilation and the runtime protocol. +Everything is driven by `bin/x`, the project's task runner — one native binary, +written in Ludic and compiled by Ludic, that replaces every build/test/bootstrap +shell script. Bootstrap it once from a clean checkout (the only step Ludic can't +do for itself, since compiling Ludic needs a compiler): ```bash -./build.sh examples/chronorift.ludic +clang selfhost/ludicc.seed.ll -o bin/ludicc && bin/ludicc tools/x/main.ludic -o bin/x +``` + +Then `bin/x build` builds the whole toolchain into `bin/` — including `bin/x` +itself — and `bin/x help` lists every command. `ludicc` compiles Ludic straight +to machine code via LLVM IR; see **[COMPILING.md](COMPILING.md)** for the +pipeline and the runtime protocol. + +```bash +bin/x app examples/chronorift.ludic ./build/chronorift # opens a native window ``` Headless render (for testing / CI): ```bash -./build.sh examples/chronorift.ludic --headless +bin/x app examples/chronorift.ludic --headless printf 'ddddwww' | ./build/chronorift_headless # writes out.ppm sips -s format png out.ppm --out frame.png ``` -A `module` compiles to a shared library instead of a program: - -```bash -./build.sh examples/lib/combat.ludic --lib # -> build/libcombat.dylib -``` - -In a browser: - -```bash -./build.sh examples/chronorift.ludic --web # -> build/web/ -python3 -m http.server -d build/web 8000 # open http://localhost:8000/ -``` - -`build/web/` is a self-contained 116 KB directory — the 42 KB module, the loader, -a page, and the sprites the compiler saw the game name. Copy it to any static -host and it runs; it needs no server-side anything and no special headers. Saves -go to `localStorage`, so `save()`/`load()` survive a reload. - -A wasm build needs an LLVM with the WebAssembly backend and `wasm-ld` — Linux -`clang`/`lld` have both, Apple's clang has neither (`brew install llvm lld`). -See **[COMPILING.md](COMPILING.md#the-web)** for the pipeline, who owns the frame -loop, and how assets are bundled. +(The shared-library and wasm/web build paths lived in the old C compiler and are +not yet re-implemented on the self-hosted native toolchain, so `bin/x app` builds +native windowed and `--headless` targets today. See +**[COMPILING.md](COMPILING.md)** for the pipeline and the runtime protocol.) ## Editor support ```bash -./tools/build-tools.sh # -> build/ludic-fmt, build/ludic-lsp +bin/x tools # -> bin/ludic-fmt, bin/ludic-lsp ``` `ludic-lsp` speaks LSP 3.17 over stdio, so one binary serves every editor: @@ -172,7 +164,7 @@ Controls: - [x] Random encounters + turn-based battle (HP/MP, seeded-RNG damage) - [x] Party + **local co-op** (P1 Knight, P2 Mage, per-player turns) - [x] Leveling (XP → stat growth) and game-over / respawn -- [x] **Self-hosting**: a Ludic-written compiler compiles its own source to a byte-exact fixpoint, and rebuilds itself from a checked-in IR seed with no C compiler in the loop (`selfhost/`, `./selfhost/bootstrap-cfree.sh`) +- [x] **Self-hosting**: a Ludic-written compiler compiles its own source to a byte-exact fixpoint, and rebuilds itself from a checked-in IR seed with no C compiler in the loop (`selfhost/`, `bin/x bootstrap-cfree`) - [x] Snapshot save / load (full ECS World) - [x] Two maps (overworld + dungeon) with map switching via the arch - [x] Boss encounter (Rift Warden) + victory condition diff --git a/SCENES-DESIGN.md b/SCENES-DESIGN.md index 091cb413..7f3d8bc1 100644 --- a/SCENES-DESIGN.md +++ b/SCENES-DESIGN.md @@ -3,7 +3,7 @@ > **Status: S0 shipped; S1–S6 are design.** The base construct — `scene` / > `layer` / `on enter` / `on exit` / `become`, lowered to the implicit machine of > §3 and §9 — is implemented and tested ([`examples/scenes.ludic`](examples/scenes.ludic), -> a `test.sh` check). The extensions in §4–§8 (scene-owned entities, richer +> a `bin/x test` check). The extensions in §4–§8 (scene-owned entities, richer > layers, the overlay stack, scene-local state, transition parameters) are still > design targets. This document reaches deliberately past the thin sketch so we > can decide the shape before building each one. §11 lists the open decisions. @@ -310,7 +310,7 @@ Each is independently shippable and testable, matching how the repo phases work. exit`/`become` lowered to the implicit `machine`; the active scene is snapshotted per phase so exactly one scene's layers dispatch in any phase. [`examples/scenes.ludic`](examples/scenes.ludic) compiles, runs, and is checked - by `test.sh`. This is the floor everything else builds on. + by `bin/x test`. This is the floor everything else builds on. - **S1 — `@OnEnter`/`@OnExit` annotation form** (E5, cheap once S0 exists). - **S2 — layer toggle & pause** (E2) on top of the existing `enable`/`disable`. ✅ *Toggle shipped* (via EVENTS-DESIGN EV1 layers): `enable layer L` / `disable diff --git a/SYNTAX-REDESIGN.md b/SYNTAX-REDESIGN.md index bd5b29b2..a5593e07 100644 --- a/SYNTAX-REDESIGN.md +++ b/SYNTAX-REDESIGN.md @@ -5,7 +5,7 @@ the spec and the compiler, then unifies the grammar around two rules. Scope: **full redesign (Phases 0–5)**. Named-field direction: **colon everywhere**. > Status: **Phases 1–5 complete.** Every phase kept the compiler self-hosting to -> a fixpoint (`./test.sh` 14/14), and each syntax migration was proven +> a fixpoint (`bin/x test` 14/14), and each syntax migration was proven > behaviour-preserving (the migrated compiler compiles itself to byte-identical > IR; every golden game renders byte-identically). Landed on branch > `syntax-redesign-phase2` over a committed baseline on `main`. @@ -173,8 +173,8 @@ machine R_PHASE { var phase: Phase = Phase.KnightMenu ## Phase sequence -Each phase is independently shippable and ends green on `./test.sh` + -`./selfhost/test.sh` (fixpoint). +Each phase is independently shippable and ends green on `bin/x test` + +`bin/x selfhost-test` (fixpoint). ### Phase 0 — Doctrine (done here) Rules A and B above; colon-everywhere; `@`-annotations as the single modifier @@ -198,14 +198,14 @@ Made spec ⇄ compiler agree **before** any grammar change. What landed: - ✅ **`reads`/`writes` honesty** (#6) + the stale "Not yet implemented" section updated in [LANGUAGE.md](LANGUAGE.md); scenes/reads-writes/dropped-CLI-flags now listed there. -- ✅ **`test.sh` guards drift** — added a `qsmoke qdecl` compile check. Suite +- ✅ **`bin/x test` guards drift** — added a `qsmoke qdecl` compile check. Suite green (14/14 incl. the toolchain agent's CLI smoke tests). - ✅ **CLI flags** (#10) — `--shared`/`--fmt`/wasm noted as dropped-with-the-C-driver in LANGUAGE.md; `-o`/`--emit-llvm` were being re-added by the toolchain agent - (now real, verified in `test.sh`); COMPILING.md updated by that agent. + (now real, verified in `bin/x test`); COMPILING.md updated by that agent. - Deferred (intentionally): `pure`-is-ignored (#5) is undocumented and harmless; it will be folded into `@pure` in Phase 3 rather than churned now. -- **Not done / by design:** `scenes.ludic` is *not* added to `test.sh` (it can't +- **Not done / by design:** `scenes.ludic` is *not* added to `bin/x test` (it can't compile yet — a positive test would fail; the header note + LANGUAGE.md warning cover the drift instead). @@ -226,7 +226,7 @@ Landed on branch `syntax-redesign-phase2` (baseline committed on `main` first). seed** and every golden game rendering identically. ~1100 boundaries across the corpus (examples, runtime, and the 25 self-host fragments). - ✅ **Reseeded** to the strict compiler (19557 lines); C-free bootstrap fixpoint - holds; `./test.sh` 14/14; all goldens byte-identical; qdecl runs correctly. + holds; `bin/x test` 14/14; all goldens byte-identical; qdecl runs correctly. - ✅ **Docs updated** — Rule B documented in LANGUAGE.md §Statements; BOOTSTRAP.md R1 (which advertised no-separator juxtaposition as legal) and its stale code fences updated; `check-docs` (now a live strict parse gate) green across all docs. @@ -248,7 +248,7 @@ agree). Flagged to the toolchain owners. The `=` is now assignment/const/default/extern-binding only. Migration tool: [migrate_records.c](tools/ludic-tools/migrate_records.c) (spawn-context aware). Records live only in games, so the seed was unaffected; verified every golden -byte-identical, old `=` form now rejected, reseeded, `test.sh` 14/14. Doc examples +byte-identical, old `=` form now rejected, reseeded, `bin/x test` 14/14. Doc examples updated (LANGUAGE.md, BOOTSTRAP.md R2). **3b — ui props → `key: value` ✅ DONE.** `panel id=Root w=288` → `panel id: Root @@ -257,7 +257,7 @@ Chose the **colonized** form over parenthesized named-args: it satisfies Rule A (the `=` overload is gone) with minimal churn, needs no new grammar, and `emit_ui` (which reads the AST) and `ludic-fmt` (which formats `:` correctly by default) were both untouched. Migration: [migrate_ui.c](tools/ludic-tools/migrate_ui.c). -menu golden byte-identical, old `=` form rejected, reseeded, `test.sh` 14/14. +menu golden byte-identical, old `=` form rejected, reseeded, `bin/x test` 14/14. (The parenthesized form `panel(id: Root, w: 288)` remains a possible future refinement if the language ever gains named call arguments.) @@ -277,7 +277,7 @@ prefix forms now rejected. Behavior-identical: the export flag is parse-only in the self-hosted emitter (it emits `@fn_` for every function and never reads the flag — the C-ABI-export capability is vestigial, a pre-existing gap), so `@export` and the old `export` produce byte-identical IR. Reseeded, fixpoint -holds, `test.sh` 14/14, goldens byte-identical. +holds, `bin/x test` 14/14, goldens byte-identical. **Phase 3 is complete.** The `=`/`:` overload (finding #2) and the modifier-zoo (findings #5, #6) are resolved; `:` associates and `=` binds throughout. @@ -359,7 +359,7 @@ Added an **annotation DSL**: `@Queries(these: [Prop{constraint}, …], on: Model a handler desugars to the existing `S_QUERY` loop (each property binds by its own name; a `Prop{…}` constraint qualifies its bare fields; `on:` adds a `{Model}` tag), and `@Handles(…)` on a program parses as documentation. See -[examples/annotations.ludic](examples/annotations.ludic); test.sh 15/15. All thirteen findings are resolved or resolved by an +[examples/annotations.ludic](examples/annotations.ludic); bin/x test 15/15. All thirteen findings are resolved or resolved by an explicit, documented decision. --- diff --git a/build-cli.sh b/build-cli.sh deleted file mode 100755 index cad36c76..00000000 --- a/build-cli.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# build-cli.sh — build the self-hosted Ludic front-end binaries. -# -# Both `ludicc` and `ludic` are the SAME native binary, compiled from the Ludic -# compiler's own IR seed (selfhost/ludicc.seed.ll) with clang alone — no C -# compiler. The binary is multi-call: it looks at argv[0], so invoked as -# `ludicc` it compiles, and invoked as `ludic` it compiles and runs. -# -# ./build-cli.sh -# ./ludicc examples/snake.ludic -o build/snake # compile -# ./ludic examples/snake.ludic # compile + play -# -# The binaries locate the runtime (runtime/native/cocoa.ll) via $LUDIC_HOME, -# defaulting to the directory they sit in — so keep them at the repo root, or -# set LUDIC_HOME and put them on your PATH. -set -eu -cd "$(dirname "$0")" -CC="${LUDIC_CC:-clang}" -mkdir -p build - -echo "cc: selfhost/ludicc.seed.ll -> ludicc/ludic (from the IR seed, no C compiler)" -$CC selfhost/ludicc.seed.ll -o build/ludicc -cp build/ludicc ludicc -cp build/ludicc ludic -chmod +x ludicc ludic -echo "done. built ./ludicc and ./ludic" diff --git a/build.sh b/build.sh deleted file mode 100755 index 9cc303ec..00000000 --- a/build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# build.sh — compile a Ludic program with the self-hosted Ludic compiler. -# -# The compiler is written in Ludic (selfhost/*.ludic). It is built from the -# checked-in LLVM-IR seed (selfhost/ludicc.seed.ll) with clang alone — no C -# compiler is involved anywhere. clang then assembles the emitted IR and links -# it; a windowed build also links the hand-written platform layer (cocoa.ll). -# -# ./build.sh examples/snake.ludic # windowed native app -# ./build.sh examples/snake.ludic --headless # headless (renders out.ppm) -set -u -cd "$(dirname "$0")" -CC="${LUDIC_CC:-clang}" -mkdir -p build - -# the compiler itself: assembled from the IR seed (C-free) -if [ ! -x build/ludicc ] || [ selfhost/ludicc.seed.ll -nt build/ludicc ]; then - echo "cc: selfhost/ludicc.seed.ll -> build/ludicc (from the IR seed, no C compiler)" - $CC selfhost/ludicc.seed.ll -o build/ludicc || exit 1 -fi - -SRC=""; MODE=windowed; SAVE=0 -for a in "$@"; do - case "$a" in - --headless) MODE=headless ;; - --windowed) MODE=windowed ;; - --save-temps) SAVE=1 ;; - -*) ;; - *) SRC="$a" ;; - esac -done -[ -n "$SRC" ] || { echo "usage: ./build.sh [--headless]"; exit 1; } -NAME="$(basename "${SRC%.ludic}")" - -case "$MODE" in - windowed) - OUT="build/$NAME" - echo "ludicc: $SRC -> $OUT (Ludic-written compiler -> LLVM IR -> windowed binary)" - build/ludicc --windowed "$SRC" > "$OUT.ll" || exit 1 - $CC -O2 "$OUT.ll" runtime/native/cocoa.ll -framework Cocoa -Wl,-rpath,@loader_path -o "$OUT" || exit 1 - [ "$SAVE" = 1 ] || rm -f "$OUT.ll" - echo "done. run: ./$OUT (from the repo root, so assets/ resolves)" - ;; - headless) - OUT="build/${NAME}_headless" - echo "ludicc: $SRC -> $OUT (renders the last frame to out.ppm)" - build/ludicc --headless "$SRC" > "$OUT.ll" || exit 1 - $CC -O2 "$OUT.ll" -o "$OUT" || exit 1 - [ "$SAVE" = 1 ] || rm -f "$OUT.ll" - echo "done. run: printf 'ddss' | ./$OUT && open out.ppm" - ;; -esac diff --git a/docs/language/collide/_section.md b/docs/language/collide/_section.md new file mode 100644 index 00000000..3bdc6fe7 --- /dev/null +++ b/docs/language/collide/_section.md @@ -0,0 +1,7 @@ +--- +id: collide +title: Collide +order: 6 +--- + +2D overlap tests on integer coordinates (pixels or tiles). Rectangles are (x, y, w, h) from the top-left; circles are (x, y, r). Each returns a bool. Squared distances are computed in 64-bit so large coordinates never overflow. diff --git a/docs/language/collide/collide-circles.md b/docs/language/collide/collide-circles.md new file mode 100644 index 00000000..cb5587bc --- /dev/null +++ b/docs/language/collide/collide-circles.md @@ -0,0 +1,22 @@ +--- +id: collide-circles +name: Collide.circles +category: collide +kind: namespace-method +tokens: Collide.circles +sig: Collide.circles(ax, ay, ar, bx, by, br) -> bool +tip: Do two circles overlap? +order: 2 +ns: Collide +member: circles +--- + +Returns true when circles centred at (ax, ay) and (bx, by) with radii ar and br overlap — that is, when the distance between centres is at most ar + br. It compares squared distances internally, so there is no square root and no precision loss. + +```ludic +program Demo { + handler Step phase Update { + if Collide.circles(px, py, 8, ex, ey, 8) { collide() } + } +} +``` diff --git a/docs/language/collide/collide-point_rect.md b/docs/language/collide/collide-point_rect.md new file mode 100644 index 00000000..5cbbf99a --- /dev/null +++ b/docs/language/collide/collide-point_rect.md @@ -0,0 +1,22 @@ +--- +id: collide-point_rect +name: Collide.point_rect +category: collide +kind: namespace-method +tokens: Collide.point_rect +sig: Collide.point_rect(px, py, rx, ry, rw, rh) -> bool +tip: Is a point inside a rectangle? +order: 1 +ns: Collide +member: point_rect +--- + +Returns true when the point (px, py) lies within the rectangle (rx, ry, rw, rh) — inclusive on the top-left edge, exclusive on the bottom-right. Use it for mouse or touch hit-testing against a button or a world region. + +```ludic +program Demo { + handler Step phase Update { + if Collide.point_rect(mx, my, bx, by, bw, bh) { press() } + } +} +``` diff --git a/docs/language/collide/collide-rect_circle.md b/docs/language/collide/collide-rect_circle.md new file mode 100644 index 00000000..6d2fb641 --- /dev/null +++ b/docs/language/collide/collide-rect_circle.md @@ -0,0 +1,22 @@ +--- +id: collide-rect_circle +name: Collide.rect_circle +category: collide +kind: namespace-method +tokens: Collide.rect_circle +sig: Collide.rect_circle(rx, ry, rw, rh, cx, cy, cr) -> bool +tip: Does a rectangle overlap a circle? +order: 3 +ns: Collide +member: rect_circle +--- + +Returns true when the rectangle (rx, ry, rw, rh) overlaps the circle centred at (cx, cy) with radius cr. It finds the point on the rectangle nearest the circle's centre and checks whether it falls within the radius — the correct test for a round actor against a blocky tile. + +```ludic +program Demo { + handler Step phase Update { + if Collide.rect_circle(tx, ty, 16, 16, bx, by, 6) { block() } + } +} +``` diff --git a/docs/language/collide/collide-rects.md b/docs/language/collide/collide-rects.md new file mode 100644 index 00000000..e0a24846 --- /dev/null +++ b/docs/language/collide/collide-rects.md @@ -0,0 +1,22 @@ +--- +id: collide-rects +name: Collide.rects +category: collide +kind: namespace-method +tokens: Collide.rects +sig: Collide.rects(ax, ay, aw, ah, bx, by, bw, bh) -> bool +tip: Do two rectangles overlap? +order: 0 +ns: Collide +member: rects +--- + +Returns true when the axis-aligned rectangles (ax, ay, aw, ah) and (bx, by, bw, bh) overlap. Edges that merely touch do not count as overlapping. This is the standard broad-phase test for two hitboxes, tiles, or UI regions. + +```ludic +program Demo { + handler Step phase Update { + if Collide.rects(px, py, 16, 16, ex, ey, 16, 16) { hit() } + } +} +``` diff --git a/docs/language/color/_section.md b/docs/language/color/_section.md new file mode 100644 index 00000000..424728eb --- /dev/null +++ b/docs/language/color/_section.md @@ -0,0 +1,7 @@ +--- +id: color +title: Color functions +order: 6 +--- + +Building and blending colors at runtime. Colors are 0x00RRGGBB ints; these pack channels and transform an existing color. The named palette constants (Color.Charcoal, …) are a separate compile-time set. diff --git a/docs/language/color/color-darken.md b/docs/language/color/color-darken.md new file mode 100644 index 00000000..2ed5b030 --- /dev/null +++ b/docs/language/color/color-darken.md @@ -0,0 +1,24 @@ +--- +id: color-darken +name: Color.darken +category: color +kind: namespace-method +tokens: Color.darken +sig: Color.darken(c, amount) -> int +tip: Scale a color toward black. +order: 3 +ns: Color +member: darken +--- + +Multiplies each channel of c by 1 - amount (amount a fixed 0..1), returning a darker color. Color.darken(c, 0.0) is unchanged and 1.0 is black. Handy for shadows and pressed-button states. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.darken(Color.Red, 0.3) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/color/color-lerp.md b/docs/language/color/color-lerp.md new file mode 100644 index 00000000..ab57eead --- /dev/null +++ b/docs/language/color/color-lerp.md @@ -0,0 +1,24 @@ +--- +id: color-lerp +name: Color.lerp +category: color +kind: namespace-method +tokens: Color.lerp +sig: Color.lerp(c0, c1, t) -> int +tip: Blend between two colors. +order: 2 +ns: Color +member: lerp +--- + +Interpolates each channel of c0 and c1 by the fixed amount t in 0.0..1.0, returning the blended color. Use it for gradients, fades between two tints, or a flash that returns to base. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.lerp(Color.Black, Color.White, 0.5) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/color/color-lighten.md b/docs/language/color/color-lighten.md new file mode 100644 index 00000000..03557255 --- /dev/null +++ b/docs/language/color/color-lighten.md @@ -0,0 +1,24 @@ +--- +id: color-lighten +name: Color.lighten +category: color +kind: namespace-method +tokens: Color.lighten +sig: Color.lighten(c, amount) -> int +tip: Scale a color toward white. +order: 4 +ns: Color +member: lighten +--- + +Moves each channel of c a fraction amount of the way to 255, returning a lighter color — the counterpart to Color.darken. Good for highlights and hover states. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.lighten(Color.Blue, 0.3) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/color/color-rgb.md b/docs/language/color/color-rgb.md new file mode 100644 index 00000000..e41ba0ec --- /dev/null +++ b/docs/language/color/color-rgb.md @@ -0,0 +1,24 @@ +--- +id: color-rgb +name: Color.rgb +category: color +kind: namespace-method +tokens: Color.rgb +sig: Color.rgb(r, g, b) -> int +tip: Build a color from red, green, blue. +order: 0 +ns: Color +member: rgb +--- + +Packs three 0..255 channel values into a single 0xRRGGBB color int. Use it to build a color from computed channels rather than a fixed literal or a palette name. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.rgb(255, 128, 64) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/color/color-rgba.md b/docs/language/color/color-rgba.md new file mode 100644 index 00000000..715c15f0 --- /dev/null +++ b/docs/language/color/color-rgba.md @@ -0,0 +1,24 @@ +--- +id: color-rgba +name: Color.rgba +category: color +kind: namespace-method +tokens: Color.rgba +sig: Color.rgba(r, g, b, a) -> int +tip: Build a color with an alpha byte. +order: 1 +ns: Color +member: rgba +--- + +Packs r, g, b, and an alpha a (0..255) into a 0xAARRGGBB int. The software renderer draws opaque, but the alpha byte is preserved for your own blending or storage. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.rgba(255, 128, 64, 200) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/color/color-with_alpha.md b/docs/language/color/color-with_alpha.md new file mode 100644 index 00000000..49febbf6 --- /dev/null +++ b/docs/language/color/color-with_alpha.md @@ -0,0 +1,24 @@ +--- +id: color-with_alpha +name: Color.with_alpha +category: color +kind: namespace-method +tokens: Color.with_alpha +sig: Color.with_alpha(c, a) -> int +tip: Replace a color's alpha byte. +order: 5 +ns: Color +member: with_alpha +--- + +Returns c with its alpha byte set to a (0..255), leaving the RGB channels untouched. + +```ludic +program Demo { + handler DrawWorld phase Render { + let c = Color.with_alpha(Color.Green, 128) + Screen.clear(c) + Screen.show() + } +} +``` diff --git a/docs/language/control/kw-break.md b/docs/language/control/kw-break.md new file mode 100644 index 00000000..6da009a7 --- /dev/null +++ b/docs/language/control/kw-break.md @@ -0,0 +1,27 @@ +--- +id: kw-break +name: break +category: control +kind: keyword +tokens: break +sig: break +tip: Leave the enclosing loop immediately. +order: 9 +--- + +break exits the innermost while or for loop at once, skipping the rest of the body and any remaining iterations, and continues with the code after the loop. Use it to stop early the moment you have what you need — the first match in a scan, a collision that ends the sweep, or a guard inside while true that decides when to leave. It affects only the loop that contains it; an outer loop keeps running. + +```ludic +program FindFirst { + var found: int = 0 - 1 + + handler Scan phase Update { + for i in 0 .. 10 { + if i * i > 20 { + found = i + break # stop at the first i whose square exceeds 20 + } + } + } +} +``` diff --git a/docs/language/control/kw-continue.md b/docs/language/control/kw-continue.md new file mode 100644 index 00000000..bad4c210 --- /dev/null +++ b/docs/language/control/kw-continue.md @@ -0,0 +1,25 @@ +--- +id: kw-continue +name: continue +category: control +kind: keyword +tokens: continue +sig: continue +tip: Skip to the next iteration of the loop. +order: 10 +--- + +continue abandons the rest of the current loop pass and jumps straight to the next one — the next condition check in a while, or the next index in a for. Use it to skip elements that do not apply without nesting the rest of the body inside an if: filter out empty slots, ignore inactive entities, or step over even numbers. Like break, it acts on the innermost loop only. + +```ludic +program SumOdds { + var total: int = 0 + + handler Add phase Update { + for i in 0 .. 10 { + if i % 2 == 0 { continue } # skip even numbers + total = total + i + } + } +} +``` diff --git a/docs/language/control/kw-where.md b/docs/language/control/kw-where.md new file mode 100644 index 00000000..4404f944 --- /dev/null +++ b/docs/language/control/kw-where.md @@ -0,0 +1,25 @@ +--- +id: kw-where +name: where +category: control +kind: keyword +tokens: where +sig: for (Binds) in query [Comps] where cond { … } +tip: Filter a query loop to entities that satisfy a condition. +order: 11 +--- + +where attaches a boolean condition to a query loop, so the body runs only for entities whose components satisfy it — the rows that fail the test are skipped entirely. The condition is an ordinary expression over the bound components, such as where Battle.hp <= 0 and Battle.side == 1. It is the imperative twin of a component filter written inside a @Queries annotation, and keeps the guard next to the loop instead of repeating an if at the top of the body. + +```ludic +program Cleanup { + property Health { hp: int = 0 } + model Foe { Health } + + handler ReapDead phase LateUpdate { + for (Health) in query [Health, {Foe}] where Health.hp <= 0 { + # only dead foes reach here + } + } +} +``` diff --git a/docs/language/ease/_section.md b/docs/language/ease/_section.md new file mode 100644 index 00000000..ced309c8 --- /dev/null +++ b/docs/language/ease/_section.md @@ -0,0 +1,7 @@ +--- +id: ease +title: Ease +order: 6 +--- + +Tween curves — the "juice" layer. Each takes a normalized amount t in 0.0..1.0 and returns an eased fixed, ready to feed to Math.lerp. All deterministic fixed-point. diff --git a/docs/language/ease/ease-back.md b/docs/language/ease/ease-back.md new file mode 100644 index 00000000..11c62264 --- /dev/null +++ b/docs/language/ease/ease-back.md @@ -0,0 +1,22 @@ +--- +id: ease-back +name: Ease.back +category: ease +kind: namespace-method +tokens: Ease.back +sig: Ease.back(t) -> fixed +tip: Ease in with a small backward anticipation. +order: 3 +ns: Ease +member: back +--- + +Returns an ease-in that first dips slightly below 0 before shooting forward — the anticipation windup that gives a motion snap. Because it undershoots, the eased value can go negative near the start, so use it where a little overshoot reads as lively rather than wrong. + +```ludic +program Demo { + handler Step phase Update { + let s = Math.lerp(rest, poke, Ease.back(progress)) + } +} +``` diff --git a/docs/language/ease/ease-bounce.md b/docs/language/ease/ease-bounce.md new file mode 100644 index 00000000..4c941e13 --- /dev/null +++ b/docs/language/ease/ease-bounce.md @@ -0,0 +1,22 @@ +--- +id: ease-bounce +name: Ease.bounce +category: ease +kind: namespace-method +tokens: Ease.bounce +sig: Ease.bounce(t) -> fixed +tip: Ease out with a settling bounce. +order: 4 +ns: Ease +member: bounce +--- + +Returns an ease-out that overshoots and bounces a few times before settling at 1.0, like a ball dropping to the floor. Great for coins landing, badges popping, or a menu that lands with character. + +```ludic +program Demo { + handler Step phase Update { + let y = Math.lerp(top, floor_y, Ease.bounce(progress)) + } +} +``` diff --git a/docs/language/ease/ease-in.md b/docs/language/ease/ease-in.md new file mode 100644 index 00000000..9a057358 --- /dev/null +++ b/docs/language/ease/ease-in.md @@ -0,0 +1,22 @@ +--- +id: ease-in +name: Ease.in +category: ease +kind: namespace-method +tokens: Ease.in +sig: Ease.in(t) -> fixed +tip: Accelerate from rest (quadratic ease-in). +order: 0 +ns: Ease +member: in +--- + +Returns t * t — motion that starts slow and speeds up. Feed the result to Math.lerp as the blend amount so a value accelerates into its target. The input t is expected in 0.0..1.0. + +```ludic +program Demo { + handler Step phase Update { + let x = Math.lerp(start_x, end_x, Ease.in(progress)) + } +} +``` diff --git a/docs/language/ease/ease-in_out.md b/docs/language/ease/ease-in_out.md new file mode 100644 index 00000000..28e406c4 --- /dev/null +++ b/docs/language/ease/ease-in_out.md @@ -0,0 +1,22 @@ +--- +id: ease-in_out +name: Ease.in_out +category: ease +kind: namespace-method +tokens: Ease.in_out +sig: Ease.in_out(t) -> fixed +tip: Ease in and then out (smoothstep). +order: 2 +ns: Ease +member: in_out +--- + +Returns the smooth 3t^2 - 2t^3 S-curve: slow at both ends, fastest in the middle. Use it for a polished there-and-back or point-to-point move that neither jerks off the mark nor slams into the target. + +```ludic +program Demo { + handler Step phase Update { + let a = Math.lerp(0.0, 1.0, Ease.in_out(progress)) + } +} +``` diff --git a/docs/language/ease/ease-out.md b/docs/language/ease/ease-out.md new file mode 100644 index 00000000..cb48a950 --- /dev/null +++ b/docs/language/ease/ease-out.md @@ -0,0 +1,22 @@ +--- +id: ease-out +name: Ease.out +category: ease +kind: namespace-method +tokens: Ease.out +sig: Ease.out(t) -> fixed +tip: Decelerate to rest (quadratic ease-out). +order: 1 +ns: Ease +member: out +--- + +Returns t * (2 - t) — motion that starts fast and slows as it arrives. The most natural-feeling easing for things settling into place, like a panel sliding in or a camera coming to rest. + +```ludic +program Demo { + handler Step phase Update { + let y = Math.lerp(top, rest_y, Ease.out(progress)) + } +} +``` diff --git a/docs/language/list/_section.md b/docs/language/list/_section.md new file mode 100644 index 00000000..c7152699 --- /dev/null +++ b/docs/language/list/_section.md @@ -0,0 +1,7 @@ +--- +id: list +title: List +order: 6 +--- + +Operations over []T slices — length, ends access, push/pop, swap, search, and in-place reverse. A slice is a shared growable buffer, so these mutate it in place and every holder sees the change. Arguments are positional. diff --git a/docs/language/list/list-clear.md b/docs/language/list/list-clear.md new file mode 100644 index 00000000..c1334478 --- /dev/null +++ b/docs/language/list/list-clear.md @@ -0,0 +1,27 @@ +--- +id: list-clear +name: List.clear +category: list +kind: namespace-method +tokens: List.clear +sig: List.clear(s) -> void +tip: Remove all elements, keeping capacity. +order: 2 +ns: List +member: clear +--- + +Empties s by setting its length back to zero. The backing buffer is kept, so refilling the slice afterward reuses the same memory without reallocating. Use it to reset a per-frame list — collisions, visible tiles, particles to draw — at the start of each update instead of building a new slice every frame. + +Parameters: +- `s` — the slice to empty + +```ludic +program FrameHits { + var hits: []int = new []int + + handler BeginFrame phase Update { + List.clear(hits) # start the frame with an empty list + } +} +``` diff --git a/docs/language/list/list-contains.md b/docs/language/list/list-contains.md new file mode 100644 index 00000000..ab3f48e2 --- /dev/null +++ b/docs/language/list/list-contains.md @@ -0,0 +1,31 @@ +--- +id: list-contains +name: List.contains +category: list +kind: namespace-method +tokens: List.contains +sig: List.contains(s, v) -> bool +tip: Whether a value appears in a slice. +order: 7 +ns: List +member: contains +--- + +Scans s and returns true if any element equals v. Comparison is by value for scalar elements (ints, entities, booleans) and by identity for reference elements. Use it for membership tests — has this tile been visited, is this entity already in the target list, is the achievement unlocked. It is a linear scan, so for very large or hot-path sets a dedicated structure will be faster. + +Parameters: +- `s` — the slice to search +- `v` — the value to look for + +```ludic +program Visited { + var seen: []int = new []int + + handler Step phase Update { + let tile = 42 + if not List.contains(seen, tile) { + List.push(seen, tile) + } + } +} +``` diff --git a/docs/language/list/list-first.md b/docs/language/list/list-first.md new file mode 100644 index 00000000..16b94cd1 --- /dev/null +++ b/docs/language/list/list-first.md @@ -0,0 +1,29 @@ +--- +id: list-first +name: List.first +category: list +kind: namespace-method +tokens: List.first +sig: List.first(s) -> T +tip: The first element of a slice. +order: 3 +ns: List +member: first +--- + +Returns element 0 of s — the same as s[0], named for readability. The slice must hold at least one element; calling it on an empty slice reads out of bounds, so guard with List.len(s) > 0 when that is possible. Use it to peek at the head of a queue or the front of an ordered list. + +Parameters: +- `s` — a non-empty slice + +```ludic +program Queue { + var waiting: []int = new []int + + handler Serve phase Update { + if List.len(waiting) > 0 { + let next = List.first(waiting) + } + } +} +``` diff --git a/docs/language/list/list-index_of.md b/docs/language/list/list-index_of.md new file mode 100644 index 00000000..64031bd6 --- /dev/null +++ b/docs/language/list/list-index_of.md @@ -0,0 +1,31 @@ +--- +id: list-index_of +name: List.index_of +category: list +kind: namespace-method +tokens: List.index_of +sig: List.index_of(s, v) -> int +tip: The index of a value in a slice, or -1 if absent. +order: 8 +ns: List +member: index_of +--- + +Scans s and returns the index of the first element equal to v, or -1 if none match. It uses the same value/identity comparison as List.contains, but tells you where the match is so you can act on it — swap it out, read a parallel slice at the same index, or guard with if idx >= 0. Only the first match is reported. + +Parameters: +- `s` — the slice to search +- `v` — the value to locate + +```ludic +program FindSlot { + var ids: []int = new []int + + handler Locate phase Update { + let slot = List.index_of(ids, 99) + if slot >= 0 { + List.swap(ids, slot, List.len(ids) - 1) + } + } +} +``` diff --git a/docs/language/list/list-insert.md b/docs/language/list/list-insert.md new file mode 100644 index 00000000..bfe93d53 --- /dev/null +++ b/docs/language/list/list-insert.md @@ -0,0 +1,22 @@ +--- +id: list-insert +name: List.insert +category: list +kind: namespace-method +tokens: List.insert +sig: List.insert(s, i, v) -> void +tip: Insert an element at an index, shifting the rest up. +order: 10 +ns: List +member: insert +--- + +Inserts v at index i, moving the elements at and after i one place toward the end and growing the backing buffer if needed. Use it to keep a list ordered as you build it, or to splice an item into the middle. Appending is cheaper with List.push. + +```ludic +program Demo { + handler Step phase Update { + List.insert(queue, 0, next_id) # push to the front + } +} +``` diff --git a/docs/language/list/list-last.md b/docs/language/list/list-last.md new file mode 100644 index 00000000..d4e91390 --- /dev/null +++ b/docs/language/list/list-last.md @@ -0,0 +1,29 @@ +--- +id: list-last +name: List.last +category: list +kind: namespace-method +tokens: List.last +sig: List.last(s) -> T +tip: The last element of a slice. +order: 4 +ns: List +member: last +--- + +Returns the final element of s — the value at index List.len(s) - 1. Like List.first, it assumes the slice is non-empty, so guard with a length check when the slice might be empty. Use it to read the most recently pushed item without removing it; use List.pop when you want to take it off. + +Parameters: +- `s` — a non-empty slice + +```ludic +program Trail { + var points: []int = new []int + + handler Head phase Update { + if List.len(points) > 0 { + let newest = List.last(points) + } + } +} +``` diff --git a/docs/language/list/list-len.md b/docs/language/list/list-len.md new file mode 100644 index 00000000..b8ff06e9 --- /dev/null +++ b/docs/language/list/list-len.md @@ -0,0 +1,27 @@ +--- +id: list-len +name: List.len +category: list +kind: namespace-method +tokens: List.len +sig: List.len(s) -> int +tip: The number of elements in a slice. +order: 0 +ns: List +member: len +--- + +Returns how many elements s currently holds. It reads the slice's length, which changes as you List.push and List.pop, and is the same value as the bare len(s). Use it to bound a loop, test for emptiness, or find the last index with List.len(s) - 1. + +Parameters: +- `s` — the slice to measure + +```ludic +program CountEnemies { + var enemies: []int = new []int + + handler Report phase Update { + let n = List.len(enemies) + } +} +``` diff --git a/docs/language/list/list-pop.md b/docs/language/list/list-pop.md new file mode 100644 index 00000000..180664e0 --- /dev/null +++ b/docs/language/list/list-pop.md @@ -0,0 +1,29 @@ +--- +id: list-pop +name: List.pop +category: list +kind: namespace-method +tokens: List.pop +sig: List.pop(s) -> T +tip: Remove and return the last element. +order: 5 +ns: List +member: pop +--- + +Removes the final element of s and returns it, shortening the slice by one. Together with List.push this makes a slice work as a stack: push to add, pop to take the most recent back off. The slice must be non-empty. Use it to unwind a history, process a work list, or undo the last action. + +Parameters: +- `s` — a non-empty slice + +```ludic +program UndoStack { + var history: []int = new []int + + handler Undo phase Update { + if List.len(history) > 0 { + let last_action = List.pop(history) + } + } +} +``` diff --git a/docs/language/list/list-push.md b/docs/language/list/list-push.md new file mode 100644 index 00000000..7b848f0a --- /dev/null +++ b/docs/language/list/list-push.md @@ -0,0 +1,28 @@ +--- +id: list-push +name: List.push +category: list +kind: namespace-method +tokens: List.push +sig: List.push(s, v) -> void +tip: Append an element to the end of a slice. +order: 1 +ns: List +member: push +--- + +Adds v to the end of s, growing the backing buffer if needed, so the slice's length increases by one. It is the same operation as the bare push(s, v). Because a slice is shared, the new element is visible to every holder. Use it to collect spawned entities, build a list of hits, or fill an inventory. + +Parameters: +- `s` — the slice to append to +- `v` — the element to add (matching the slice's element type) + +```ludic +program Collect { + var picked: []int = new []int + + handler Grab phase Update { + List.push(picked, 7) + } +} +``` diff --git a/docs/language/list/list-remove.md b/docs/language/list/list-remove.md new file mode 100644 index 00000000..0e03df6c --- /dev/null +++ b/docs/language/list/list-remove.md @@ -0,0 +1,22 @@ +--- +id: list-remove +name: List.remove +category: list +kind: namespace-method +tokens: List.remove +sig: List.remove(s, v) -> void +tip: Remove the first element equal to a value. +order: 12 +ns: List +member: remove +--- + +Scans for the first element equal to v and removes it (shifting the rest down); if no element matches, the slice is unchanged. Comparison is by value for scalars and by identity for reference elements, matching List.contains. Only the first match is removed. + +```ludic +program Demo { + handler Step phase Update { + List.remove(active, dead_entity) + } +} +``` diff --git a/docs/language/list/list-remove_at.md b/docs/language/list/list-remove_at.md new file mode 100644 index 00000000..ed2abe2a --- /dev/null +++ b/docs/language/list/list-remove_at.md @@ -0,0 +1,22 @@ +--- +id: list-remove_at +name: List.remove_at +category: list +kind: namespace-method +tokens: List.remove_at +sig: List.remove_at(s, i) -> void +tip: Remove the element at an index, shifting the rest down. +order: 11 +ns: List +member: remove_at +--- + +Removes the element at index i, moving everything after it one place toward the front and shortening the slice by one. Order is preserved. When order does not matter, swapping the item to the end and calling List.pop is cheaper. + +```ludic +program Demo { + handler Step phase Update { + List.remove_at(effects, expired) + } +} +``` diff --git a/docs/language/list/list-reverse.md b/docs/language/list/list-reverse.md new file mode 100644 index 00000000..103a9b2d --- /dev/null +++ b/docs/language/list/list-reverse.md @@ -0,0 +1,28 @@ +--- +id: list-reverse +name: List.reverse +category: list +kind: namespace-method +tokens: List.reverse +sig: List.reverse(s) -> void +tip: Reverse the order of a slice in place. +order: 9 +ns: List +member: reverse +--- + +Reverses s so its first element becomes last and vice versa, mutating the slice in place rather than returning a copy. Use it to flip an order you built back-to-front — a path traced from goal to start, an undo stack you want oldest-first, or a list you appended to and now want to read in the opposite direction. + +Parameters: +- `s` — the slice to reverse + +```ludic +program PathOrder { + var path: []int = new []int + + handler Finalize phase Update { + # path was built from the goal back to the start + List.reverse(path) # now start -> goal + } +} +``` diff --git a/docs/language/list/list-sort.md b/docs/language/list/list-sort.md new file mode 100644 index 00000000..58a9a088 --- /dev/null +++ b/docs/language/list/list-sort.md @@ -0,0 +1,22 @@ +--- +id: list-sort +name: List.sort +category: list +kind: namespace-method +tokens: List.sort +sig: List.sort(s) -> void +tip: Sort a slice in ascending order, in place. +order: 13 +ns: List +member: sort +--- + +Sorts the elements of s in ascending order in place, using an insertion sort. It is intended for slices of scalar elements (ints, entities, fixed) where < is meaningful; reference elements are ordered by identity, which is rarely useful. Insertion sort is simple and fast for the small, nearly-sorted lists games usually hold. + +```ludic +program Demo { + handler Step phase Update { + List.sort(scores) + } +} +``` diff --git a/docs/language/list/list-swap.md b/docs/language/list/list-swap.md new file mode 100644 index 00000000..ab9f8b03 --- /dev/null +++ b/docs/language/list/list-swap.md @@ -0,0 +1,32 @@ +--- +id: list-swap +name: List.swap +category: list +kind: namespace-method +tokens: List.swap +sig: List.swap(s, i, j) -> void +tip: Exchange the elements at two indices. +order: 6 +ns: List +member: swap +--- + +Exchanges the elements at indices i and j in s, in place. Both indices must be within the slice. Swapping is the building block of shuffles, sorts, and moving an item to the end before List.pop to remove it cheaply without shifting the rest. + +Parameters: +- `s` — the slice to modify +- `i` — the first index +- `j` — the second index + +```ludic +program RemoveFast { + var actors: []int = new []int + + handler Kill phase Update { + let dead = 2 + let last = List.len(actors) - 1 + List.swap(actors, dead, last) # move it to the end... + let removed = List.pop(actors) # ...then drop it + } +} +``` diff --git a/docs/language/math/_section.md b/docs/language/math/_section.md new file mode 100644 index 00000000..d38a8fd0 --- /dev/null +++ b/docs/language/math/_section.md @@ -0,0 +1,7 @@ +--- +id: math +title: Math +order: 6 +--- + +Deterministic fixed-point math. Every function is computed in Q16.16 with plain integer arithmetic, so results are bit-identical on every platform and every run — the same guarantee the rest of the runtime gives. Arguments are positional. diff --git a/docs/language/math/math-abs.md b/docs/language/math/math-abs.md new file mode 100644 index 00000000..8d32bc27 --- /dev/null +++ b/docs/language/math/math-abs.md @@ -0,0 +1,28 @@ +--- +id: math-abs +name: Math.abs +category: math +kind: namespace-method +tokens: Math.abs +sig: Math.abs(x) -> int +tip: The magnitude of a value, dropping its sign. +order: 2 +ns: Math +member: abs +--- + +Returns the absolute value of x — its distance from zero, always non-negative. It preserves the type of its argument, so Math.abs of a fixed stays fixed. Reach for it when you care about how far apart two things are regardless of direction, such as the gap between a target and current position, or the speed behind a signed velocity. The bare form abs(x) is kept as a convenience alias. + +Parameters: +- `x` — the value whose magnitude you want + +```ludic +program ChaseDistance { + var target: int = 40 + var here: int = 12 + + handler Report phase Update { + let gap = Math.abs(target - here) # 28, regardless of which is larger + } +} +``` diff --git a/docs/language/math/math-acos.md b/docs/language/math/math-acos.md new file mode 100644 index 00000000..6af03290 --- /dev/null +++ b/docs/language/math/math-acos.md @@ -0,0 +1,22 @@ +--- +id: math-acos +name: Math.acos +category: math +kind: namespace-method +tokens: Math.acos +sig: Math.acos(x) -> fixed +tip: The arccosine of a value, in radians. +order: 28 +ns: Math +member: acos +--- + +Returns the angle in radians whose cosine is x, in 0..pi. The input should be in -1.0..1.0. Handy for recovering the angle between two normalized directions from their dot product. + +```ludic +program Demo { + handler Step phase Update { + let between = Math.acos(dot) + } +} +``` diff --git a/docs/language/math/math-asin.md b/docs/language/math/math-asin.md new file mode 100644 index 00000000..0e5c52b3 --- /dev/null +++ b/docs/language/math/math-asin.md @@ -0,0 +1,22 @@ +--- +id: math-asin +name: Math.asin +category: math +kind: namespace-method +tokens: Math.asin +sig: Math.asin(x) -> fixed +tip: The arcsine of a value, in radians. +order: 27 +ns: Math +member: asin +--- + +Returns the angle in radians whose sine is x, in -pi/2..pi/2. The input should be in -1.0..1.0. Built from Math.atan2 and Math.sqrt, so it is deterministic. + +```ludic +program Demo { + handler Step phase Update { + let angle = Math.asin(height / radius) + } +} +``` diff --git a/docs/language/math/math-atan2.md b/docs/language/math/math-atan2.md new file mode 100644 index 00000000..482dafec --- /dev/null +++ b/docs/language/math/math-atan2.md @@ -0,0 +1,22 @@ +--- +id: math-atan2 +name: Math.atan2 +category: math +kind: namespace-method +tokens: Math.atan2 +sig: Math.atan2(y, x) -> fixed +tip: The angle of the vector (x, y), in radians. +order: 26 +ns: Math +member: atan2 +--- + +Returns the angle in radians from the positive x-axis to the point (x, y), in the full range -pi..pi — the standard way to get a heading from a direction vector. Note the argument order is y then x. Deterministic fixed-point, accurate to within about a degree. + +```ludic +program Demo { + handler Step phase Update { + let heading = Math.atan2(target_y - y, target_x - x) + } +} +``` diff --git a/docs/language/math/math-ceil.md b/docs/language/math/math-ceil.md new file mode 100644 index 00000000..7a3583c4 --- /dev/null +++ b/docs/language/math/math-ceil.md @@ -0,0 +1,29 @@ +--- +id: math-ceil +name: Math.ceil +category: math +kind: namespace-method +tokens: Math.ceil +sig: Math.ceil(x) -> int +tip: Round a fixed value up to the nearest whole int. +order: 6 +ns: Math +member: ceil +--- + +Takes a fixed value and returns the smallest int not less than it — rounding toward positive infinity, so Math.ceil(2.1) is 3 and Math.ceil(4.0) stays 4. Use it when you need to cover a fractional amount with whole units: how many full tiles a span touches, or how many rows a variable-height list needs. + +Parameters: +- `x` — the `fixed` value to round up + +```ludic +program RowsNeeded { + const ROW_HEIGHT: fixed = 12.0 + + var content_height: fixed = 30.0 + + handler Layout phase Update { + let rows = Math.ceil(content_height / ROW_HEIGHT) # 3 + } +} +``` diff --git a/docs/language/math/math-clamp.md b/docs/language/math/math-clamp.md new file mode 100644 index 00000000..98a2e4ff --- /dev/null +++ b/docs/language/math/math-clamp.md @@ -0,0 +1,31 @@ +--- +id: math-clamp +name: Math.clamp +category: math +kind: namespace-method +tokens: Math.clamp +sig: Math.clamp(v, lo, hi) -> int +tip: Constrain a value to the range [lo, hi]. +order: 3 +ns: Math +member: clamp +--- + +Returns v held inside the inclusive range lo..hi: below lo it returns lo, above hi it returns hi, otherwise v unchanged. It is the single-call form of Math.max(lo, Math.min(v, hi)) and works for int and fixed alike. Use it to keep a camera inside the world, a slider within its track, or a stat within its legal bounds. The bare form clamp(v, lo, hi) is kept as a convenience alias. + +Parameters: +- `v` — the value to constrain +- `lo` — the lowest allowed result (inclusive) +- `hi` — the highest allowed result (inclusive) + +```ludic +program CameraBounds { + const WORLD_WIDTH: int = 320 + + var camera_x: int = 0 + + handler Follow phase Update { + camera_x = Math.clamp(camera_x, 0, WORLD_WIDTH - 1) + } +} +``` diff --git a/docs/language/math/math-cos.md b/docs/language/math/math-cos.md new file mode 100644 index 00000000..38ab2894 --- /dev/null +++ b/docs/language/math/math-cos.md @@ -0,0 +1,22 @@ +--- +id: math-cos +name: Math.cos +category: math +kind: namespace-method +tokens: Math.cos +sig: Math.cos(radians) -> fixed +tip: Cosine of an angle in radians. +order: 13 +ns: Math +member: cos +--- + +Returns the cosine of radians as a fixed in -1.0..1.0, computed as Math.sin(radians + pi/2) off the same deterministic table. Use Math.cos and Math.sin together to convert an angle into an (x, y) direction — for orbits, aiming, or steering. + +```ludic +program Demo { + handler Step phase Update { + let x = center_x + Math.cos(angle) * radius + } +} +``` diff --git a/docs/language/math/math-deg_to_rad.md b/docs/language/math/math-deg_to_rad.md new file mode 100644 index 00000000..ff714f42 --- /dev/null +++ b/docs/language/math/math-deg_to_rad.md @@ -0,0 +1,22 @@ +--- +id: math-deg_to_rad +name: Math.deg_to_rad +category: math +kind: namespace-method +tokens: Math.deg_to_rad +sig: Math.deg_to_rad(degrees) -> fixed +tip: Convert degrees to radians. +order: 18 +ns: Math +member: deg_to_rad +--- + +Converts an angle from degrees to radians (multiplying by pi/180), since Math.sin/Math.cos/Math.tan all take radians. Use it when your data or design speaks in degrees — a 90-degree turn, a 45-degree cone — and you need to feed it to the trig functions. + +```ludic +program Demo { + handler Step phase Update { + let r = Math.sin(Math.deg_to_rad(90.0)) # ~1.0 + } +} +``` diff --git a/docs/language/math/math-dist.md b/docs/language/math/math-dist.md new file mode 100644 index 00000000..c4a4cc8b --- /dev/null +++ b/docs/language/math/math-dist.md @@ -0,0 +1,22 @@ +--- +id: math-dist +name: Math.dist +category: math +kind: namespace-method +tokens: Math.dist +sig: Math.dist(x0, y0, x1, y1) -> fixed +tip: Distance between two points. +order: 16 +ns: Math +member: dist +--- + +Returns the straight-line distance between (x0, y0) and (x1, y1) — sqrt(dx*dx + dy*dy) in fixed-point. Use it for proximity and range checks. When you only need to compare distances (which is nearer? within radius?), prefer Math.dist2, which skips the square root. + +```ludic +program Demo { + handler Step phase Update { + if Math.dist(px, py, ex, ey) < attack_range { strike() } + } +} +``` diff --git a/docs/language/math/math-dist2.md b/docs/language/math/math-dist2.md new file mode 100644 index 00000000..61564077 --- /dev/null +++ b/docs/language/math/math-dist2.md @@ -0,0 +1,23 @@ +--- +id: math-dist2 +name: Math.dist2 +category: math +kind: namespace-method +tokens: Math.dist2 +sig: Math.dist2(x0, y0, x1, y1) -> fixed +tip: Squared distance between two points. +order: 17 +ns: Math +member: dist2 +--- + +Returns the squared distance between (x0, y0) and (x1, y1) — dx*dx + dy*dy, with no square root. Comparing squared distances gives the same ordering as comparing real distances, so this is the cheaper choice for "nearest" and "within radius" tests: compare against radius * radius instead of calling Math.dist. + +```ludic +program Demo { + handler Step phase Update { + let r2 = radius * radius + if Math.dist2(px, py, ex, ey) < r2 { in_range() } + } +} +``` diff --git a/docs/language/math/math-floor.md b/docs/language/math/math-floor.md new file mode 100644 index 00000000..3e167d94 --- /dev/null +++ b/docs/language/math/math-floor.md @@ -0,0 +1,29 @@ +--- +id: math-floor +name: Math.floor +category: math +kind: namespace-method +tokens: Math.floor +sig: Math.floor(x) -> int +tip: Round a fixed value down to the nearest whole int. +order: 5 +ns: Math +member: floor +--- + +Takes a fixed value and returns the largest int not greater than it — rounding toward negative infinity, so Math.floor(2.7) is 2 and Math.floor(-0.2) is -1. This is the fixed-to-int conversion you reach for when turning a smooth position into a whole tile or pixel index. It is the same operation as the bare flr(x). + +Parameters: +- `x` — the `fixed` value to round down + +```ludic +program TileIndex { + const TILE_SIZE: fixed = 16.0 + + var world_x: fixed = 40.5 + + handler Locate phase Update { + let column = Math.floor(world_x / TILE_SIZE) # 2 + } +} +``` diff --git a/docs/language/math/math-hypot.md b/docs/language/math/math-hypot.md new file mode 100644 index 00000000..bbfcde55 --- /dev/null +++ b/docs/language/math/math-hypot.md @@ -0,0 +1,22 @@ +--- +id: math-hypot +name: Math.hypot +category: math +kind: namespace-method +tokens: Math.hypot +sig: Math.hypot(x, y) -> fixed +tip: Length of the vector (x, y). +order: 15 +ns: Math +member: hypot +--- + +Returns sqrt(x*x + y*y) — the length of the 2D vector (x, y), or equivalently the hypotenuse of a right triangle with those legs. It is the one-call form for a magnitude and reads more clearly than spelling out the squares and root. To normalize a vector, divide each component by its Math.hypot. + +```ludic +program Demo { + handler Step phase Update { + let length = Math.hypot(velocity_x, velocity_y) + } +} +``` diff --git a/docs/language/math/math-inverse_lerp.md b/docs/language/math/math-inverse_lerp.md new file mode 100644 index 00000000..33860365 --- /dev/null +++ b/docs/language/math/math-inverse_lerp.md @@ -0,0 +1,31 @@ +--- +id: math-inverse_lerp +name: Math.inverse_lerp +category: math +kind: namespace-method +tokens: Math.inverse_lerp +sig: Math.inverse_lerp(a, b, v) -> fixed +tip: Find where a value sits between two endpoints as a 0..1 fraction. +order: 9 +ns: Math +member: inverse_lerp +--- + +The inverse of Math.lerp: given endpoints a and b and a value v, it returns the fraction (v - a) / (b - a) — 0.0 when v equals a, 1.0 when it equals b. Use it to turn a raw quantity into a normalized amount: how full a health bar is, how far a timer has run, or the t to feed into another Math.lerp. The endpoints must differ, since equal ones would divide by zero. + +Parameters: +- `a` — the endpoint that maps to `0.0` +- `b` — the endpoint that maps to `1.0` +- `v` — the value to locate between them + +```ludic +program HealthFraction { + const MAX_HP: fixed = 200.0 + + var hp: fixed = 150.0 + + handler Draw phase Render { + let fraction = Math.inverse_lerp(0.0, MAX_HP, hp) # 0.75 + } +} +``` diff --git a/docs/language/math/math-lerp.md b/docs/language/math/math-lerp.md new file mode 100644 index 00000000..b91a9644 --- /dev/null +++ b/docs/language/math/math-lerp.md @@ -0,0 +1,30 @@ +--- +id: math-lerp +name: Math.lerp +category: math +kind: namespace-method +tokens: Math.lerp +sig: Math.lerp(a, b, t) -> fixed +tip: Blend between two values by a 0..1 amount. +order: 8 +ns: Math +member: lerp +--- + +Linear interpolation: returns a when t is 0.0, b when t is 1.0, and a proportional blend in between — the exact value a + (b - a) * t. All three arguments are fixed and the result is fixed. It is the workhorse behind smooth motion: ease a camera toward a target, fade a value over time, or sample a gradient. Values of t outside 0..1 extrapolate past the endpoints. + +Parameters: +- `a` — the value returned at `t = 0.0` +- `b` — the value returned at `t = 1.0` +- `t` — the blend amount, normally `0.0`..`1.0` + +```ludic +program EaseCamera { + var camera_x: fixed = 0.0 + var target_x: fixed = 100.0 + + handler Follow phase Update { + camera_x = Math.lerp(camera_x, target_x, 0.1) # glides a tenth of the way each frame + } +} +``` diff --git a/docs/language/math/math-max.md b/docs/language/math/math-max.md new file mode 100644 index 00000000..f84fa7d0 --- /dev/null +++ b/docs/language/math/math-max.md @@ -0,0 +1,28 @@ +--- +id: math-max +name: Math.max +category: math +kind: namespace-method +tokens: Math.max +sig: Math.max(a, b) -> int +tip: The larger of two values. +order: 1 +ns: Math +member: max +--- + +Returns whichever of a and b is larger. Like Math.min, it works for both int and fixed operands. Use it to hold a value at a floor — for example keeping a countdown at zero instead of going negative, or a health bar from dropping below the minimum. The bare form max(a, b) is kept as a convenience alias. + +Parameters: +- `a` — the first value +- `b` — the second value + +```ludic +program Countdown { + var timer: int = 60 + + handler Tick phase Update { + timer = Math.max(timer - 1, 0) # stops at 0, never negative + } +} +``` diff --git a/docs/language/math/math-min.md b/docs/language/math/math-min.md new file mode 100644 index 00000000..700bc66c --- /dev/null +++ b/docs/language/math/math-min.md @@ -0,0 +1,28 @@ +--- +id: math-min +name: Math.min +category: math +kind: namespace-method +tokens: Math.min +sig: Math.min(a, b) -> int +tip: The smaller of two values. +order: 0 +ns: Math +member: min +--- + +Returns whichever of a and b is smaller. It works on plain int values and on fixed values alike — both are stored as signed 32-bit words, so the comparison keeps their order either way. Use it to cap a value at a ceiling, keep a cursor inside a list, or take the nearer of two distances. The bare form min(a, b) is kept as a convenience alias. + +Parameters: +- `a` — the first value +- `b` — the second value + +```ludic +program ClampScore { + var score: int = 0 + + handler AddPoint phase Update { + score = Math.min(score + 1, 100) # never climbs past 100 + } +} +``` diff --git a/docs/language/math/math-move_toward.md b/docs/language/math/math-move_toward.md new file mode 100644 index 00000000..d9493661 --- /dev/null +++ b/docs/language/math/math-move_toward.md @@ -0,0 +1,22 @@ +--- +id: math-move_toward +name: Math.move_toward +category: math +kind: namespace-method +tokens: Math.move_toward +sig: Math.move_toward(from, to, delta) -> fixed +tip: Step from one value toward another by at most delta. +order: 24 +ns: Math +member: move_toward +--- + +Moves from toward to by at most delta, never overshooting — when the gap is smaller than delta it returns exactly to. Unlike Math.lerp, which eases by a fraction of the remaining distance, this moves at a constant rate, which is what you want for turrets, meters, and UI values that should approach a target steadily and then stop. + +```ludic +program Demo { + handler Step phase Update { + health_shown = Math.move_toward(health_shown, health, 2.0) + } +} +``` diff --git a/docs/language/math/math-ping_pong.md b/docs/language/math/math-ping_pong.md new file mode 100644 index 00000000..a9c2837f --- /dev/null +++ b/docs/language/math/math-ping_pong.md @@ -0,0 +1,22 @@ +--- +id: math-ping_pong +name: Math.ping_pong +category: math +kind: namespace-method +tokens: Math.ping_pong +sig: Math.ping_pong(t, len) -> int +tip: Bounce a counter back and forth in [0, len]. +order: 22 +ns: Math +member: ping_pong +--- + +Maps an ever-increasing counter t to a value that rises from 0 to len and back, bouncing forever — the triangle wave to Math.wrap's sawtooth. Feed it a frame counter to drive a patrol, a pulsing highlight, or a back-and-forth sweep without tracking direction yourself. + +```ludic +program Demo { + handler Step phase Update { + let phase = Math.ping_pong(frame, 30) + } +} +``` diff --git a/docs/language/math/math-posmod.md b/docs/language/math/math-posmod.md new file mode 100644 index 00000000..477e379b --- /dev/null +++ b/docs/language/math/math-posmod.md @@ -0,0 +1,22 @@ +--- +id: math-posmod +name: Math.posmod +category: math +kind: namespace-method +tokens: Math.posmod +sig: Math.posmod(a, m) -> int +tip: Modulo that is always non-negative. +order: 20 +ns: Math +member: posmod +--- + +Returns a modulo m, but always in the range 0..m-1 — unlike the % operator, which keeps the sign of a (so -1 % 5 is -1, while Math.posmod(-1, 5) is 4). It is what you want for wrapping indices and grid coordinates that can go negative. + +```ludic +program Demo { + handler Step phase Update { + let col = Math.posmod(x, grid_width) # never negative + } +} +``` diff --git a/docs/language/math/math-rad_to_deg.md b/docs/language/math/math-rad_to_deg.md new file mode 100644 index 00000000..b150e129 --- /dev/null +++ b/docs/language/math/math-rad_to_deg.md @@ -0,0 +1,22 @@ +--- +id: math-rad_to_deg +name: Math.rad_to_deg +category: math +kind: namespace-method +tokens: Math.rad_to_deg +sig: Math.rad_to_deg(radians) -> fixed +tip: Convert radians to degrees. +order: 19 +ns: Math +member: rad_to_deg +--- + +Converts an angle from radians to degrees (multiplying by 180/pi) — the inverse of Math.deg_to_rad. Use it to present an internally-radians angle in the degrees a player or designer expects, for a HUD readout or a debug overlay. + +```ludic +program Demo { + handler Step phase Update { + let heading_deg = Math.rad_to_deg(heading) + } +} +``` diff --git a/docs/language/math/math-remap.md b/docs/language/math/math-remap.md new file mode 100644 index 00000000..1563cc76 --- /dev/null +++ b/docs/language/math/math-remap.md @@ -0,0 +1,34 @@ +--- +id: math-remap +name: Math.remap +category: math +kind: namespace-method +tokens: Math.remap +sig: Math.remap(v, in0, in1, out0, out1) -> fixed +tip: Rescale a value from one range into another. +order: 10 +ns: Math +member: remap +--- + +Maps v from the input range in0..in1 onto the output range out0..out1, keeping its relative position — equivalent to Math.lerp(out0, out1, Math.inverse_lerp(in0, in1, v)). All arguments are fixed. It is the one call that converts between units: a health value into a bar width, a noise sample in -1..1 into a 0..255 shade, or a mouse position into a world coordinate. Swap the output ends to invert the mapping. + +Parameters: +- `v` — the value to rescale +- `in0` — the start of the input range +- `in1` — the end of the input range +- `out0` — the start of the output range +- `out1` — the end of the output range + +```ludic +program HealthBar { + const MAX_HP: fixed = 200.0 + const BAR_WIDTH: fixed = 64.0 + + var hp: fixed = 150.0 + + handler Draw phase Render { + let width = Math.remap(hp, 0.0, MAX_HP, 0.0, BAR_WIDTH) # 48.0 + } +} +``` diff --git a/docs/language/math/math-round.md b/docs/language/math/math-round.md new file mode 100644 index 00000000..7e602617 --- /dev/null +++ b/docs/language/math/math-round.md @@ -0,0 +1,27 @@ +--- +id: math-round +name: Math.round +category: math +kind: namespace-method +tokens: Math.round +sig: Math.round(x) -> int +tip: Round a fixed value to the nearest whole int. +order: 7 +ns: Math +member: round +--- + +Takes a fixed value and returns the nearest int, with halves rounding up: Math.round(2.5) is 3 and Math.round(2.4) is 2. Choose it over Math.floor when you want the closest whole value rather than always the lower one — snapping a smoothly-moving sprite to a pixel, or reporting a fractional total as a clean number. + +Parameters: +- `x` — the `fixed` value to round to nearest + +```ludic +program SnapToPixel { + var smooth_x: fixed = 10.5 + + handler Draw phase Render { + let px = Math.round(smooth_x) # 11 + } +} +``` diff --git a/docs/language/math/math-sign.md b/docs/language/math/math-sign.md new file mode 100644 index 00000000..23fadbe5 --- /dev/null +++ b/docs/language/math/math-sign.md @@ -0,0 +1,28 @@ +--- +id: math-sign +name: Math.sign +category: math +kind: namespace-method +tokens: Math.sign +sig: Math.sign(x) -> int +tip: The sign of a value as -1, 0, or 1. +order: 4 +ns: Math +member: sign +--- + +Returns -1 when x is negative, 1 when it is positive, and 0 when it is exactly zero. It works on both int and fixed values, since zero and sign are the same in Q16.16. Multiply a step by Math.sign(dx) to move one unit toward a target, or read the sign of a velocity to decide which way a sprite faces. + +Parameters: +- `x` — the value to test + +```ludic +program FaceTarget { + var x: int = 8 + var target: int = 20 + + handler StepToward phase Update { + x = x + Math.sign(target - x) # +1 while target is to the right + } +} +``` diff --git a/docs/language/math/math-sin.md b/docs/language/math/math-sin.md new file mode 100644 index 00000000..d5651114 --- /dev/null +++ b/docs/language/math/math-sin.md @@ -0,0 +1,22 @@ +--- +id: math-sin +name: Math.sin +category: math +kind: namespace-method +tokens: Math.sin +sig: Math.sin(radians) -> fixed +tip: Sine of an angle in radians. +order: 12 +ns: Math +member: sin +--- + +Returns the sine of radians as a fixed in -1.0..1.0. It is table-driven (a 256-entry Q16.16 sine table with linear interpolation) so it is fast and fully deterministic. Angles wrap, so any value works — no need to reduce into a range first. Pair it with Math.cos to turn an angle into a direction. + +```ludic +program Demo { + handler Step phase Update { + let y = center_y + Math.sin(angle) * radius + } +} +``` diff --git a/docs/language/math/math-smoothstep.md b/docs/language/math/math-smoothstep.md new file mode 100644 index 00000000..23ed1e39 --- /dev/null +++ b/docs/language/math/math-smoothstep.md @@ -0,0 +1,22 @@ +--- +id: math-smoothstep +name: Math.smoothstep +category: math +kind: namespace-method +tokens: Math.smoothstep +sig: Math.smoothstep(e0, e1, x) -> fixed +tip: A smooth 0..1 ramp between two edges. +order: 25 +ns: Math +member: smoothstep +--- + +Returns 0.0 when x is at or below e0, 1.0 at or above e1, and a smooth S-curve (ease-in and ease-out) in between — the classic t*t*(3 - 2t) Hermite ramp. Use it for fades, dissolves, and easing a normalized amount before feeding it to Math.lerp, when a straight linear ramp looks too abrupt. + +```ludic +program Demo { + handler Step phase Update { + let a = Math.smoothstep(0.0, 1.0, fade_t) + } +} +``` diff --git a/docs/language/math/math-snapped.md b/docs/language/math/math-snapped.md new file mode 100644 index 00000000..40d7c5bc --- /dev/null +++ b/docs/language/math/math-snapped.md @@ -0,0 +1,22 @@ +--- +id: math-snapped +name: Math.snapped +category: math +kind: namespace-method +tokens: Math.snapped +sig: Math.snapped(v, step) -> fixed +tip: Round a value to the nearest multiple of step. +order: 23 +ns: Math +member: snapped +--- + +Rounds v to the nearest multiple of step (both fixed) — for snapping a position to a grid, quantizing an angle to 8 directions, or rounding a value to a tidy increment. Math.snapped(x, 16.0) snaps x to a 16-unit grid. + +```ludic +program Demo { + handler Step phase Update { + let gx = Math.snapped(world_x, 16.0) + } +} +``` diff --git a/docs/language/math/math-sqrt.md b/docs/language/math/math-sqrt.md new file mode 100644 index 00000000..ad2e348f --- /dev/null +++ b/docs/language/math/math-sqrt.md @@ -0,0 +1,22 @@ +--- +id: math-sqrt +name: Math.sqrt +category: math +kind: namespace-method +tokens: Math.sqrt +sig: Math.sqrt(x) -> fixed +tip: The square root of a fixed value. +order: 11 +ns: Math +member: sqrt +--- + +Returns the non-negative square root of x, computed in Q16.16 by a deterministic integer algorithm — so it is bit-identical on every platform, the same guarantee the rest of the runtime gives. Negative inputs return 0. Use it for lengths and distances; when you have two legs of a right triangle reach for Math.hypot, and when you only need to compare magnitudes prefer the cheaper squared distance Math.dist2. + +```ludic +program Demo { + handler Step phase Update { + let speed = Math.sqrt(vx * vx + vy * vy) + } +} +``` diff --git a/docs/language/math/math-tan.md b/docs/language/math/math-tan.md new file mode 100644 index 00000000..35b7a1b4 --- /dev/null +++ b/docs/language/math/math-tan.md @@ -0,0 +1,22 @@ +--- +id: math-tan +name: Math.tan +category: math +kind: namespace-method +tokens: Math.tan +sig: Math.tan(radians) -> fixed +tip: Tangent of an angle in radians. +order: 14 +ns: Math +member: tan +--- + +Returns the tangent of radians, computed as Math.sin(radians) / Math.cos(radians) in fixed-point. Near odd multiples of pi/2 the cosine approaches zero and the result grows without bound, so guard those angles. For most gameplay, Math.sin/Math.cos are what you want; tan is here for slopes and field-of-view math. + +```ludic +program Demo { + handler Step phase Update { + let slope = Math.tan(pitch) + } +} +``` diff --git a/docs/language/math/math-wrap.md b/docs/language/math/math-wrap.md new file mode 100644 index 00000000..ec4fd328 --- /dev/null +++ b/docs/language/math/math-wrap.md @@ -0,0 +1,22 @@ +--- +id: math-wrap +name: Math.wrap +category: math +kind: namespace-method +tokens: Math.wrap +sig: Math.wrap(v, lo, hi) -> int +tip: Wrap a value into the range [lo, hi). +order: 21 +ns: Math +member: wrap +--- + +Wraps v into the half-open range lo..hi, so values that run off one end reappear at the other — the toroidal counterpart to Math.clamp. Use it for wrap-around movement, cycling through a menu, or keeping a scrolling offset in bounds. + +```ludic +program Demo { + handler Step phase Update { + let x = Math.wrap(player_x, 0, world_width) + } +} +``` diff --git a/docs/language/mem/_section.md b/docs/language/mem/_section.md new file mode 100644 index 00000000..0276b1e2 --- /dev/null +++ b/docs/language/mem/_section.md @@ -0,0 +1,7 @@ +--- +id: mem +title: Mem +order: 6 +--- + +Raw memory — allocate byte and word buffers, copy and fill regions, and peek/poke individual bytes. The low-level escape hatch. diff --git a/docs/language/mem/mem-bytes.md b/docs/language/mem/mem-bytes.md new file mode 100644 index 00000000..6f56d2bb --- /dev/null +++ b/docs/language/mem/mem-bytes.md @@ -0,0 +1,14 @@ +--- +id: mem-bytes +name: Mem.bytes +category: mem +kind: namespace-method +tokens: Mem.bytes +sig: Mem.bytes(n) -> ptr +tip: Allocate n bytes. +order: 0 +ns: Mem +member: bytes +--- + +Allocates an n-byte buffer and returns a pointer to it. diff --git a/docs/language/mem/mem-copy.md b/docs/language/mem/mem-copy.md new file mode 100644 index 00000000..e600766f --- /dev/null +++ b/docs/language/mem/mem-copy.md @@ -0,0 +1,14 @@ +--- +id: mem-copy +name: Mem.copy +category: mem +kind: namespace-method +tokens: Mem.copy +sig: Mem.copy(dst, src, n) -> void +tip: Copy n bytes between buffers. +order: 2 +ns: Mem +member: copy +--- + +Copies n bytes from src to dst (regions must not overlap). diff --git a/docs/language/mem/mem-fill.md b/docs/language/mem/mem-fill.md new file mode 100644 index 00000000..36ecd917 --- /dev/null +++ b/docs/language/mem/mem-fill.md @@ -0,0 +1,14 @@ +--- +id: mem-fill +name: Mem.fill +category: mem +kind: namespace-method +tokens: Mem.fill +sig: Mem.fill(buf, value, n) -> void +tip: Set n bytes to a value. +order: 3 +ns: Mem +member: fill +--- + +Sets the first n bytes of buf to the byte value. diff --git a/docs/language/mem/mem-peek.md b/docs/language/mem/mem-peek.md new file mode 100644 index 00000000..b463fbd6 --- /dev/null +++ b/docs/language/mem/mem-peek.md @@ -0,0 +1,14 @@ +--- +id: mem-peek +name: Mem.peek +category: mem +kind: namespace-method +tokens: Mem.peek +sig: Mem.peek(buf, i) -> int +tip: Read one byte. +order: 4 +ns: Mem +member: peek +--- + +Returns the byte at buf[i] as an int in 0..255. diff --git a/docs/language/mem/mem-poke.md b/docs/language/mem/mem-poke.md new file mode 100644 index 00000000..ac1408f4 --- /dev/null +++ b/docs/language/mem/mem-poke.md @@ -0,0 +1,14 @@ +--- +id: mem-poke +name: Mem.poke +category: mem +kind: namespace-method +tokens: Mem.poke +sig: Mem.poke(buf, i, value) -> void +tip: Write one byte. +order: 5 +ns: Mem +member: poke +--- + +Stores the low byte of value at buf[i]. diff --git a/docs/language/mem/mem-words.md b/docs/language/mem/mem-words.md new file mode 100644 index 00000000..a94f0c67 --- /dev/null +++ b/docs/language/mem/mem-words.md @@ -0,0 +1,14 @@ +--- +id: mem-words +name: Mem.words +category: mem +kind: namespace-method +tokens: Mem.words +sig: Mem.words(n) -> words +tip: Allocate n 32-bit words. +order: 1 +ns: Mem +member: words +--- + +Allocates a buffer of n 32-bit integer words, indexable as w[i]. diff --git a/docs/language/net/_section.md b/docs/language/net/_section.md new file mode 100644 index 00000000..0b4af04f --- /dev/null +++ b/docs/language/net/_section.md @@ -0,0 +1,7 @@ +--- +id: net +title: Net +order: 6 +--- + +The low-level networking seam — send and poll datagrams, serialize and apply entity state, and read ownership and role. Offline these collapse to single-player defaults. diff --git a/docs/language/net/net-apply.md b/docs/language/net/net-apply.md new file mode 100644 index 00000000..0e271f85 --- /dev/null +++ b/docs/language/net/net-apply.md @@ -0,0 +1,14 @@ +--- +id: net-apply +name: Net.apply +category: net +kind: namespace-method +tokens: Net.apply +sig: Net.apply(entity, buf) -> int +tip: Apply serialized state to an entity. +order: 3 +ns: Net +member: apply +--- + +Reads synced fields from buf into entity — the inverse of Net.serialize. diff --git a/docs/language/net/net-is_owner.md b/docs/language/net/net-is_owner.md new file mode 100644 index 00000000..d942a2bf --- /dev/null +++ b/docs/language/net/net-is_owner.md @@ -0,0 +1,14 @@ +--- +id: net-is_owner +name: Net.is_owner +category: net +kind: namespace-method +tokens: Net.is_owner +sig: Net.is_owner(entity) -> bool +tip: Does this peer own the entity? +order: 7 +ns: Net +member: is_owner +--- + +Returns true when this peer owns entity — owner(entity) == local_id(). diff --git a/docs/language/net/net-is_server.md b/docs/language/net/net-is_server.md new file mode 100644 index 00000000..74b7f521 --- /dev/null +++ b/docs/language/net/net-is_server.md @@ -0,0 +1,14 @@ +--- +id: net-is_server +name: Net.is_server +category: net +kind: namespace-method +tokens: Net.is_server +sig: Net.is_server() -> bool +tip: Is this peer the server? +order: 6 +ns: Net +member: is_server +--- + +Returns true on the authoritative peer. Offline it is true, so server-only guards run in single-player. diff --git a/docs/language/net/net-local_id.md b/docs/language/net/net-local_id.md new file mode 100644 index 00000000..831d11b0 --- /dev/null +++ b/docs/language/net/net-local_id.md @@ -0,0 +1,14 @@ +--- +id: net-local_id +name: Net.local_id +category: net +kind: namespace-method +tokens: Net.local_id +sig: Net.local_id() -> int +tip: This peer's own id. +order: 8 +ns: Net +member: local_id +--- + +Returns the network id of the local peer. diff --git a/docs/language/net/net-owner.md b/docs/language/net/net-owner.md new file mode 100644 index 00000000..777a213d --- /dev/null +++ b/docs/language/net/net-owner.md @@ -0,0 +1,14 @@ +--- +id: net-owner +name: Net.owner +category: net +kind: namespace-method +tokens: Net.owner +sig: Net.owner(entity) -> int +tip: The peer that owns an entity. +order: 4 +ns: Net +member: owner +--- + +Returns the peer id that owns entity's @Owned state. diff --git a/docs/language/net/net-poll.md b/docs/language/net/net-poll.md new file mode 100644 index 00000000..ef8e722b --- /dev/null +++ b/docs/language/net/net-poll.md @@ -0,0 +1,14 @@ +--- +id: net-poll +name: Net.poll +category: net +kind: namespace-method +tokens: Net.poll +sig: Net.poll(buf, cap) -> int +tip: Read an inbound datagram. +order: 1 +ns: Net +member: poll +--- + +Reads up to cap bytes of the next inbound datagram into buf and returns the byte count, or zero when none is waiting. diff --git a/docs/language/net/net-send.md b/docs/language/net/net-send.md new file mode 100644 index 00000000..88a29e49 --- /dev/null +++ b/docs/language/net/net-send.md @@ -0,0 +1,14 @@ +--- +id: net-send +name: Net.send +category: net +kind: namespace-method +tokens: Net.send +sig: Net.send(peer, buf, len) -> void +tip: Put a datagram on the wire. +order: 0 +ns: Net +member: send +--- + +Sends the first len bytes of buf to peer. Absent a real socket it uses the built-in loopback, so offline code still runs. diff --git a/docs/language/net/net-serialize.md b/docs/language/net/net-serialize.md new file mode 100644 index 00000000..a48f28de --- /dev/null +++ b/docs/language/net/net-serialize.md @@ -0,0 +1,14 @@ +--- +id: net-serialize +name: Net.serialize +category: net +kind: namespace-method +tokens: Net.serialize +sig: Net.serialize(entity, buf) -> int +tip: Serialize an entity's synced state. +order: 2 +ns: Net +member: serialize +--- + +Writes the @Sync fields of entity into buf and returns the byte count, for sending over the wire. diff --git a/docs/language/net/net-set_owner.md b/docs/language/net/net-set_owner.md new file mode 100644 index 00000000..b2d33394 --- /dev/null +++ b/docs/language/net/net-set_owner.md @@ -0,0 +1,14 @@ +--- +id: net-set_owner +name: Net.set_owner +category: net +kind: namespace-method +tokens: Net.set_owner +sig: Net.set_owner(entity, peer) -> void +tip: Assign ownership of an entity. +order: 5 +ns: Net +member: set_owner +--- + +Sets the owning peer of entity to peer. diff --git a/docs/language/operators/op-logical.md b/docs/language/operators/op-logical.md index 24533c7e..1f03f23b 100644 --- a/docs/language/operators/op-logical.md +++ b/docs/language/operators/op-logical.md @@ -3,6 +3,7 @@ id: op-logical name: Logical category: operators kind: operator +tokens: and or not sig: and or not tip: The boolean combinators, spelled as words — never && or || or a bare !. order: 2 diff --git a/docs/language/random/random-int.md b/docs/language/random/random-int.md new file mode 100644 index 00000000..14e896ec --- /dev/null +++ b/docs/language/random/random-int.md @@ -0,0 +1,25 @@ +--- +id: random-int +name: Random.int +category: random +kind: namespace-method +tokens: Random.int +sig: Random.int(max) -> int +tip: A random integer in [0, max). +order: 4 +ns: Random +member: int +--- + +Returns a deterministic integer from 0 up to but not including max. Use it to pick a random index into a list of length max. Returns 0 when max is not positive. + +```ludic +program Demo { + handler Seed phase Start { Random.seed(value: 7) } + handler Step phase Update { + let idx = Random.int(list_count) + } +} + } +} +``` diff --git a/docs/language/random/random-sign.md b/docs/language/random/random-sign.md new file mode 100644 index 00000000..53353340 --- /dev/null +++ b/docs/language/random/random-sign.md @@ -0,0 +1,25 @@ +--- +id: random-sign +name: Random.sign +category: random +kind: namespace-method +tokens: Random.sign +sig: Random.sign() -> int +tip: A random +1 or -1. +order: 5 +ns: Random +member: sign +--- + +Returns 1 or -1 with equal probability — a deterministic coin flip for choosing a direction or jitter sign. + +```ludic +program Demo { + handler Seed phase Start { Random.seed(value: 7) } + handler Step phase Update { + let dir = Random.sign() + } +} + } +} +``` diff --git a/docs/language/random/random-value.md b/docs/language/random/random-value.md new file mode 100644 index 00000000..a8b4cb5b --- /dev/null +++ b/docs/language/random/random-value.md @@ -0,0 +1,25 @@ +--- +id: random-value +name: Random.value +category: random +kind: namespace-method +tokens: Random.value +sig: Random.value() -> fixed +tip: A random fixed value in [0, 1). +order: 3 +ns: Random +member: value +--- + +Returns a deterministic fixed-point value in 0.0..1.0 (exclusive of 1). Multiply it into a range, or compare it against a probability. The sequence is fixed for a given Random.seed. + +```ludic +program Demo { + handler Seed phase Start { Random.seed(value: 7) } + handler Step phase Update { + let t = Random.value() + } +} + } +} +``` diff --git a/docs/language/save/_section.md b/docs/language/save/_section.md new file mode 100644 index 00000000..797a0d82 --- /dev/null +++ b/docs/language/save/_section.md @@ -0,0 +1,7 @@ +--- +id: save +title: Save +order: 6 +--- + +Whole-world save and restore — write a binary snapshot of the ECS world and read it back. diff --git a/docs/language/save/save-read.md b/docs/language/save/save-read.md new file mode 100644 index 00000000..433182fb --- /dev/null +++ b/docs/language/save/save-read.md @@ -0,0 +1,14 @@ +--- +id: save-read +name: Save.read +category: save +kind: namespace-method +tokens: Save.read +sig: Save.read() -> bool +tip: Restore the saved snapshot. +order: 1 +ns: Save +member: read +--- + +Restores the world from the save slot, returning false when there is no snapshot to load. diff --git a/docs/language/save/save-write.md b/docs/language/save/save-write.md new file mode 100644 index 00000000..b80d446d --- /dev/null +++ b/docs/language/save/save-write.md @@ -0,0 +1,14 @@ +--- +id: save-write +name: Save.write +category: save +kind: namespace-method +tokens: Save.write +sig: Save.write() -> void +tip: Save a snapshot of the world. +order: 0 +ns: Save +member: write +--- + +Writes a binary snapshot of the whole ECS world to the save slot. diff --git a/docs/language/screen/screen-circle.md b/docs/language/screen/screen-circle.md new file mode 100644 index 00000000..2c947ce5 --- /dev/null +++ b/docs/language/screen/screen-circle.md @@ -0,0 +1,24 @@ +--- +id: screen-circle +name: Screen.circle +category: screen +kind: namespace-method +tokens: Screen.circle +sig: Screen.circle(x, y, radius, color) +tip: Draw a circle outline. +order: 11 +ns: Screen +member: circle +--- + +Draws the outline of a circle centred at (x, y) with the given radius in color. Use it for rings, radii, and selection markers; for a solid disc use Screen.fill_circle. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.circle(x: 160, y: 120, radius: 40, color: Color.Cyan) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-fill_circle.md b/docs/language/screen/screen-fill_circle.md new file mode 100644 index 00000000..133bd47e --- /dev/null +++ b/docs/language/screen/screen-fill_circle.md @@ -0,0 +1,24 @@ +--- +id: screen-fill_circle +name: Screen.fill_circle +category: screen +kind: namespace-method +tokens: Screen.fill_circle +sig: Screen.fill_circle(x, y, radius, color) +tip: Draw a filled disc. +order: 12 +ns: Screen +member: fill_circle +--- + +Draws a solid disc centred at (x, y) with the given radius in color, one horizontal span per row. Use it for round bodies, bullets, and glows. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.fill_circle(x: bx, y: by, radius: 6, color: Color.Gold) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-fill_triangle.md b/docs/language/screen/screen-fill_triangle.md new file mode 100644 index 00000000..291e58a0 --- /dev/null +++ b/docs/language/screen/screen-fill_triangle.md @@ -0,0 +1,24 @@ +--- +id: screen-fill_triangle +name: Screen.fill_triangle +category: screen +kind: namespace-method +tokens: Screen.fill_triangle +sig: Screen.fill_triangle(x1, y1, x2, y2, x3, y3, color) +tip: Draw a filled triangle. +order: 14 +ns: Screen +member: fill_triangle +--- + +Fills the triangle with corners (x1, y1), (x2, y2), (x3, y3) in color, scanning its bounding box with an inside test. The building block for flat-shaded polygons and arrowheads. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.fill_triangle(x1: 10, y1: 10, x2: 30, y2: 10, x3: 20, y3: 26, color: Color.Red) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-line.md b/docs/language/screen/screen-line.md new file mode 100644 index 00000000..d8c001f0 --- /dev/null +++ b/docs/language/screen/screen-line.md @@ -0,0 +1,24 @@ +--- +id: screen-line +name: Screen.line +category: screen +kind: namespace-method +tokens: Screen.line +sig: Screen.line(x1, y1, x2, y2, color) +tip: Draw a straight line between two points. +order: 10 +ns: Screen +member: line +--- + +Draws a one-pixel line from (x1, y1) to (x2, y2) in color, using an integer Bresenham walk so it looks the same on every platform. Use it for lasers, tethers, debug rays, and vector art. Draw during the Render phase. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.line(x1: px, y1: py, x2: tx, y2: ty, color: Color.White) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-sprite.md b/docs/language/screen/screen-sprite.md new file mode 100644 index 00000000..86725d8b --- /dev/null +++ b/docs/language/screen/screen-sprite.md @@ -0,0 +1,24 @@ +--- +id: screen-sprite +name: Screen.sprite +category: screen +kind: namespace-method +tokens: Screen.sprite +sig: Screen.sprite(id, x, y) +tip: Blit a sprite at its natural size. +order: 15 +ns: Screen +member: sprite +--- + +Draws sprite id from the loaded sprite sheet at (x, y), at its natural 16x16 size. Load the sheet once at start, then draw sprites each frame during Render. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.sprite(id: hero_frame, x: px, y: py) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-sprite_scaled.md b/docs/language/screen/screen-sprite_scaled.md new file mode 100644 index 00000000..fa9569d3 --- /dev/null +++ b/docs/language/screen/screen-sprite_scaled.md @@ -0,0 +1,24 @@ +--- +id: screen-sprite_scaled +name: Screen.sprite_scaled +category: screen +kind: namespace-method +tokens: Screen.sprite_scaled +sig: Screen.sprite_scaled(id, x, y, scale) +tip: Blit a sprite at an integer scale. +order: 16 +ns: Screen +member: sprite_scaled +--- + +Draws sprite id at (x, y) enlarged by an integer scale (2 doubles it, and so on) — for chunky pixel-art zoom without blurring. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.sprite_scaled(id: boss, x: bx, y: by, scale: 3) + Screen.show() + } +} +``` diff --git a/docs/language/screen/screen-triangle.md b/docs/language/screen/screen-triangle.md new file mode 100644 index 00000000..f12b9c26 --- /dev/null +++ b/docs/language/screen/screen-triangle.md @@ -0,0 +1,24 @@ +--- +id: screen-triangle +name: Screen.triangle +category: screen +kind: namespace-method +tokens: Screen.triangle +sig: Screen.triangle(x1, y1, x2, y2, x3, y3, color) +tip: Draw a triangle outline. +order: 13 +ns: Screen +member: triangle +--- + +Draws the outline of the triangle with corners (x1, y1), (x2, y2), (x3, y3) in color — three lines. Use it for arrows, wedges, and vector shapes. + +```ludic +program Demo { + handler DrawWorld phase Render { + Screen.clear(Color.MidnightBlue) + Screen.triangle(x1: 10, y1: 10, x2: 30, y2: 10, x3: 20, y3: 26, color: Color.White) + Screen.show() + } +} +``` diff --git a/docs/language/structure/kw-entry.md b/docs/language/structure/kw-entry.md new file mode 100644 index 00000000..ad2bde92 --- /dev/null +++ b/docs/language/structure/kw-entry.md @@ -0,0 +1,21 @@ +--- +id: kw-entry +name: entry +category: structure +kind: keyword +tokens: entry +sig: entry { … } +tip: The program's main block — runs once, top to bottom. +order: 10 +--- + +entry declares the program's entry point: a single block that runs once when the program starts, in order, and then the program exits. It is the counterpart to the ECS game loop — where a game is built from handlers driven by phases each frame, an entry program is a straight-line script, which is why the compiler and tools in this repo are written with it. Use it for command-line programs and one-shot tools; use program with handlers for interactive games. + +```ludic +program Greet { + entry { + print("hello") + print(2 + 2) + } +} +``` diff --git a/docs/language/structure/kw-new.md b/docs/language/structure/kw-new.md new file mode 100644 index 00000000..fc1e9ce4 --- /dev/null +++ b/docs/language/structure/kw-new.md @@ -0,0 +1,24 @@ +--- +id: kw-new +name: new +category: structure +kind: keyword +tokens: new +sig: new Record { … } new []T +tip: Allocate a property record or an empty slice on the heap. +order: 12 +--- + +new constructs a heap value and returns a reference to it. new Record { field: value, … } allocates a property (or struct) record, filling any omitted fields with their declared defaults; new []T allocates an empty growable slice of element type T, ready for List.push. Because both are references, passing one around shares the same underlying object. Use new for standalone data your code holds directly — as opposed to spawn, which creates a full ECS entity the world tracks and queries. + +```ludic +program Build { + property Point { x: int = 0, y: int = 0 } + + entry { + let origin = new Point { x: 3 } # y defaults to 0 + let items = new []int # empty, then grow it + List.push(items, origin.x) + } +} +``` diff --git a/docs/language/structure/kw-public.md b/docs/language/structure/kw-public.md new file mode 100644 index 00000000..9644c591 --- /dev/null +++ b/docs/language/structure/kw-public.md @@ -0,0 +1,23 @@ +--- +id: kw-public +name: public +category: structure +kind: keyword +tokens: public +sig: scene Name start public { … } +tip: Expose a declaration's lifecycle on the public event bus. +order: 11 +--- + +public marks a scene, layer, or event as part of the game's public surface, so its lifecycle is emitted as named events other systems and mods can react to with @On. A public scene fires scene_<Name>_enter and scene_<Name>_exit; a public layer fires layer_<Name>_show / _hide. It is the declaration-level counterpart to the @Public annotation that promotes a model or handler's lifecycle hooks. Keep it off by default and add it only where the modding surface genuinely needs the hook. + +```ludic +program Flow { + @On(scene_Menu_enter) handler Greet { print(1) } + + scene Menu start public { + on enter { print(10) } # entering Menu prints 10, then fires scene_Menu_enter + on exit { print(20) } + } +} +``` diff --git a/docs/language/sys/_section.md b/docs/language/sys/_section.md new file mode 100644 index 00000000..246c6792 --- /dev/null +++ b/docs/language/sys/_section.md @@ -0,0 +1,7 @@ +--- +id: sys +title: Sys +order: 6 +--- + +Process and OS access — command-line arguments, environment, exit code, running a shell command, and raw file I/O. Outside the deterministic simulation. diff --git a/docs/language/sys/sys-arg.md b/docs/language/sys/sys-arg.md new file mode 100644 index 00000000..8c19297f --- /dev/null +++ b/docs/language/sys/sys-arg.md @@ -0,0 +1,14 @@ +--- +id: sys-arg +name: Sys.arg +category: sys +kind: namespace-method +tokens: Sys.arg +sig: Sys.arg(i) -> str +tip: A command-line argument by index. +order: 0 +ns: Sys +member: arg +--- + +Returns the i-th command-line argument; index 0 is the program path. diff --git a/docs/language/sys/sys-arg_count.md b/docs/language/sys/sys-arg_count.md new file mode 100644 index 00000000..b3f59516 --- /dev/null +++ b/docs/language/sys/sys-arg_count.md @@ -0,0 +1,14 @@ +--- +id: sys-arg_count +name: Sys.arg_count +category: sys +kind: namespace-method +tokens: Sys.arg_count +sig: Sys.arg_count() -> int +tip: The number of command-line arguments. +order: 1 +ns: Sys +member: arg_count +--- + +Returns how many command-line arguments were passed, including the program path. diff --git a/docs/language/sys/sys-env.md b/docs/language/sys/sys-env.md new file mode 100644 index 00000000..1ed6de28 --- /dev/null +++ b/docs/language/sys/sys-env.md @@ -0,0 +1,14 @@ +--- +id: sys-env +name: Sys.env +category: sys +kind: namespace-method +tokens: Sys.env +sig: Sys.env(name) -> str +tip: Read an environment variable. +order: 4 +ns: Sys +member: env +--- + +Returns the value of environment variable name, or a null string if it is unset. diff --git a/docs/language/sys/sys-exit.md b/docs/language/sys/sys-exit.md new file mode 100644 index 00000000..f8425628 --- /dev/null +++ b/docs/language/sys/sys-exit.md @@ -0,0 +1,14 @@ +--- +id: sys-exit +name: Sys.exit +category: sys +kind: namespace-method +tokens: Sys.exit +sig: Sys.exit(code) -> void +tip: End the process with a status code. +order: 2 +ns: Sys +member: exit +--- + +Terminates the program immediately, returning code to the shell. diff --git a/docs/language/sys/sys-file_close.md b/docs/language/sys/sys-file_close.md new file mode 100644 index 00000000..b02fa359 --- /dev/null +++ b/docs/language/sys/sys-file_close.md @@ -0,0 +1,14 @@ +--- +id: sys-file_close +name: Sys.file_close +category: sys +kind: namespace-method +tokens: Sys.file_close +sig: Sys.file_close(file) -> void +tip: Close a file. +order: 11 +ns: Sys +member: file_close +--- + +Closes file, flushing any buffered writes. diff --git a/docs/language/sys/sys-file_open.md b/docs/language/sys/sys-file_open.md new file mode 100644 index 00000000..d18fbf0c --- /dev/null +++ b/docs/language/sys/sys-file_open.md @@ -0,0 +1,14 @@ +--- +id: sys-file_open +name: Sys.file_open +category: sys +kind: namespace-method +tokens: Sys.file_open +sig: Sys.file_open(path, mode) -> ptr +tip: Open a file. +order: 6 +ns: Sys +member: file_open +--- + +Opens path with the given mode (as C fopen) and returns a file handle, or null on failure. diff --git a/docs/language/sys/sys-file_read.md b/docs/language/sys/sys-file_read.md new file mode 100644 index 00000000..6ba1324b --- /dev/null +++ b/docs/language/sys/sys-file_read.md @@ -0,0 +1,14 @@ +--- +id: sys-file_read +name: Sys.file_read +category: sys +kind: namespace-method +tokens: Sys.file_read +sig: Sys.file_read(file, buf, n) -> int +tip: Read bytes from a file. +order: 7 +ns: Sys +member: file_read +--- + +Reads up to n bytes from file into buf and returns the number read. diff --git a/docs/language/sys/sys-file_seek.md b/docs/language/sys/sys-file_seek.md new file mode 100644 index 00000000..4258a206 --- /dev/null +++ b/docs/language/sys/sys-file_seek.md @@ -0,0 +1,14 @@ +--- +id: sys-file_seek +name: Sys.file_seek +category: sys +kind: namespace-method +tokens: Sys.file_seek +sig: Sys.file_seek(file, offset, whence) -> int +tip: Move a file's read/write position. +order: 9 +ns: Sys +member: file_seek +--- + +Seeks file to offset relative to whence (as C fseek). diff --git a/docs/language/sys/sys-file_tell.md b/docs/language/sys/sys-file_tell.md new file mode 100644 index 00000000..3f423a93 --- /dev/null +++ b/docs/language/sys/sys-file_tell.md @@ -0,0 +1,14 @@ +--- +id: sys-file_tell +name: Sys.file_tell +category: sys +kind: namespace-method +tokens: Sys.file_tell +sig: Sys.file_tell(file) -> int +tip: The current file position. +order: 10 +ns: Sys +member: file_tell +--- + +Returns the current read/write offset of file. diff --git a/docs/language/sys/sys-file_write.md b/docs/language/sys/sys-file_write.md new file mode 100644 index 00000000..76e2ff3f --- /dev/null +++ b/docs/language/sys/sys-file_write.md @@ -0,0 +1,14 @@ +--- +id: sys-file_write +name: Sys.file_write +category: sys +kind: namespace-method +tokens: Sys.file_write +sig: Sys.file_write(file, buf, n) -> int +tip: Write bytes to a file. +order: 8 +ns: Sys +member: file_write +--- + +Writes n bytes from buf to file and returns the number written. diff --git a/docs/language/sys/sys-read_char.md b/docs/language/sys/sys-read_char.md new file mode 100644 index 00000000..b854bb7f --- /dev/null +++ b/docs/language/sys/sys-read_char.md @@ -0,0 +1,14 @@ +--- +id: sys-read_char +name: Sys.read_char +category: sys +kind: namespace-method +tokens: Sys.read_char +sig: Sys.read_char() -> int +tip: Read one byte from standard input. +order: 5 +ns: Sys +member: read_char +--- + +Reads and returns the next byte from standard input, or a negative value at end of input. diff --git a/docs/language/sys/sys-run.md b/docs/language/sys/sys-run.md new file mode 100644 index 00000000..8392dd56 --- /dev/null +++ b/docs/language/sys/sys-run.md @@ -0,0 +1,14 @@ +--- +id: sys-run +name: Sys.run +category: sys +kind: namespace-method +tokens: Sys.run +sig: Sys.run(command) -> int +tip: Run a shell command. +order: 3 +ns: Sys +member: run +--- + +Runs command through the system shell and returns its exit status. Blocks until it finishes. diff --git a/docs/language/sys/sys-stderr.md b/docs/language/sys/sys-stderr.md new file mode 100644 index 00000000..3edde5fb --- /dev/null +++ b/docs/language/sys/sys-stderr.md @@ -0,0 +1,14 @@ +--- +id: sys-stderr +name: Sys.stderr +category: sys +kind: namespace-method +tokens: Sys.stderr +sig: Sys.stderr() -> ptr +tip: The standard error handle. +order: 13 +ns: Sys +member: stderr +--- + +Returns the standard-error file handle, for Sys.file_write. diff --git a/docs/language/sys/sys-stdout.md b/docs/language/sys/sys-stdout.md new file mode 100644 index 00000000..371c6ee5 --- /dev/null +++ b/docs/language/sys/sys-stdout.md @@ -0,0 +1,14 @@ +--- +id: sys-stdout +name: Sys.stdout +category: sys +kind: namespace-method +tokens: Sys.stdout +sig: Sys.stdout() -> ptr +tip: The standard output handle. +order: 12 +ns: Sys +member: stdout +--- + +Returns the standard-output file handle, for Sys.file_write. diff --git a/docs/language/text/_section.md b/docs/language/text/_section.md new file mode 100644 index 00000000..70bd8bf6 --- /dev/null +++ b/docs/language/text/_section.md @@ -0,0 +1,7 @@ +--- +id: text +title: Text +order: 6 +--- + +String queries and building over str values — length, character access, substrings, search, prefix/suffix tests, and int conversion. Arguments are positional. Strings are byte sequences, so indices and lengths count bytes. diff --git a/docs/language/text/text-char_at.md b/docs/language/text/text-char_at.md new file mode 100644 index 00000000..73796a0b --- /dev/null +++ b/docs/language/text/text-char_at.md @@ -0,0 +1,29 @@ +--- +id: text-char_at +name: Text.char_at +category: text +kind: namespace-method +tokens: Text.char_at +sig: Text.char_at(s, i) -> int +tip: The byte value at an index, 0..255. +order: 1 +ns: Text +member: char_at +--- + +Returns the byte at position i in s as an int in the range 0..255 — for example Text.char_at("hello", 0) is 104, the code for h. Indices are zero-based and count bytes. Use it to inspect or classify individual characters, such as testing whether a key of input is a digit. + +Parameters: +- `s` — the string to read from +- `i` — the zero-based byte index + +```ludic +program FirstIsDigit { + var entry: str = "7up" + + handler Check phase Update { + let c = Text.char_at(entry, 0) + let is_digit = c >= 48 and c <= 57 # true: '7' + } +} +``` diff --git a/docs/language/text/text-concat.md b/docs/language/text/text-concat.md new file mode 100644 index 00000000..ceecedcf --- /dev/null +++ b/docs/language/text/text-concat.md @@ -0,0 +1,28 @@ +--- +id: text-concat +name: Text.concat +category: text +kind: namespace-method +tokens: Text.concat +sig: Text.concat(a, b) -> str +tip: Join two strings into a new one. +order: 8 +ns: Text +member: concat +--- + +Returns a fresh string that is a followed by b. It is the call form of the a + b string operator and allocates a new string, leaving the inputs untouched. For building a line from several pieces, backtick interpolation such as `score: {n}` is usually clearer; reach for Text.concat when joining two values you already hold. + +Parameters: +- `a` — the left string +- `b` — the right string + +```ludic +program Greeting { + var name: str = "world" + + handler Build phase Update { + let line = Text.concat("hello ", name) # "hello world" + } +} +``` diff --git a/docs/language/text/text-contains.md b/docs/language/text/text-contains.md new file mode 100644 index 00000000..ea272d28 --- /dev/null +++ b/docs/language/text/text-contains.md @@ -0,0 +1,30 @@ +--- +id: text-contains +name: Text.contains +category: text +kind: namespace-method +tokens: Text.contains +sig: Text.contains(s, sub) -> bool +tip: Whether a substring appears anywhere in a string. +order: 5 +ns: Text +member: contains +--- + +Returns true when sub occurs anywhere inside s. An empty substring is always considered present. Use it for a quick membership test — filtering a log line, checking for a forbidden word, or seeing whether a path includes a folder — when you do not need the position. Reach for Text.index_of when you also want where it matched. + +Parameters: +- `s` — the string to search +- `sub` — the substring to look for + +```ludic +program Filter { + var line: str = "error: disk full" + + handler Scan phase Update { + if Text.contains(line, "error") { + # flag it + } + } +} +``` diff --git a/docs/language/text/text-ends_with.md b/docs/language/text/text-ends_with.md new file mode 100644 index 00000000..de29002d --- /dev/null +++ b/docs/language/text/text-ends_with.md @@ -0,0 +1,28 @@ +--- +id: text-ends_with +name: Text.ends_with +category: text +kind: namespace-method +tokens: Text.ends_with +sig: Text.ends_with(s, suffix) -> bool +tip: Whether a string ends with a given suffix. +order: 4 +ns: Text +member: ends_with +--- + +Returns true when s ends with suffix, comparing the tail of the string over the suffix's length. If the suffix is longer than the string it simply returns false. Use it to detect file types by extension, recognize a trailing marker, or validate that input closes as expected. + +Parameters: +- `s` — the string to test +- `suffix` — the trailing substring to look for + +```ludic +program IsImage { + var filename: str = "hero.png" + + handler Classify phase Update { + let png = Text.ends_with(filename, ".png") # true + } +} +``` diff --git a/docs/language/text/text-equals.md b/docs/language/text/text-equals.md new file mode 100644 index 00000000..5ac25126 --- /dev/null +++ b/docs/language/text/text-equals.md @@ -0,0 +1,31 @@ +--- +id: text-equals +name: Text.equals +category: text +kind: namespace-method +tokens: Text.equals +sig: Text.equals(a, b) -> bool +tip: Whether two strings have identical bytes. +order: 7 +ns: Text +member: equals +--- + +Returns true when a and b hold the same bytes in the same order. This is a value comparison, not a pointer check, and is exactly what the == operator does between two strings — Text.equals is the named form for readability. Use it to match input against a keyword or compare a slice with an expected token. + +Parameters: +- `a` — the first string +- `b` — the second string + +```ludic +program Guess { + var answer: str = "swordfish" + var attempt: str = "swordfish" + + handler Check phase Update { + if Text.equals(attempt, answer) { + # correct + } + } +} +``` diff --git a/docs/language/text/text-from_int.md b/docs/language/text/text-from_int.md new file mode 100644 index 00000000..cdde41ba --- /dev/null +++ b/docs/language/text/text-from_int.md @@ -0,0 +1,27 @@ +--- +id: text-from_int +name: Text.from_int +category: text +kind: namespace-method +tokens: Text.from_int +sig: Text.from_int(n) -> str +tip: Render an integer as a string. +order: 10 +ns: Text +member: from_int +--- + +Returns the decimal text of the integer n — Text.from_int(1234) is "1234", and negatives keep their sign. It is the same conversion as the bare str(n) and the inverse of Text.to_int. Use it when you need a number as characters — to measure its width, concatenate it, or store it — though drawing a number to the screen is better done with Screen.draw_number. + +Parameters: +- `n` — the integer to render + +```ludic +program ScoreLabel { + var score: int = 1500 + + handler Build phase Update { + let label = Text.concat("score: ", Text.from_int(score)) + } +} +``` diff --git a/docs/language/text/text-index_of.md b/docs/language/text/text-index_of.md new file mode 100644 index 00000000..9c1e6bb7 --- /dev/null +++ b/docs/language/text/text-index_of.md @@ -0,0 +1,30 @@ +--- +id: text-index_of +name: Text.index_of +category: text +kind: namespace-method +tokens: Text.index_of +sig: Text.index_of(s, sub) -> int +tip: The byte index of a substring, or -1 if absent. +order: 6 +ns: Text +member: index_of +--- + +Returns the zero-based byte index where sub first appears in s, or -1 if it never does — so Text.index_of("hello world", "world") is 6. Use it to locate a separator before slicing, or as a present-and-where test in one call: guard with if idx >= 0. It reports the first match only. + +Parameters: +- `s` — the string to search +- `sub` — the substring to locate + +```ludic +program KeyValue { + var pair: str = "hp=42" + + handler Parse phase Update { + let eq = Text.index_of(pair, "=") # 2 + let key = Text.slice(pair, 0, eq) # "hp" + let value = Text.to_int(Text.slice(pair, eq + 1, Text.length(pair))) + } +} +``` diff --git a/docs/language/text/text-join.md b/docs/language/text/text-join.md new file mode 100644 index 00000000..7c9e88a0 --- /dev/null +++ b/docs/language/text/text-join.md @@ -0,0 +1,22 @@ +--- +id: text-join +name: Text.join +category: text +kind: namespace-method +tokens: Text.join +sig: Text.join(parts, sep) -> str +tip: Join a list of strings with a separator. +order: 18 +ns: Text +member: join +--- + +Concatenates the strings in the slice parts into one string, placing sep between each — the inverse of Text.split. With an empty separator it simply concatenates. Use it to build a CSV row, a path, or a display list from pieces. + +```ludic +program Demo { + handler Step phase Update { + let line = Text.join(fields, ",") + } +} +``` diff --git a/docs/language/text/text-length.md b/docs/language/text/text-length.md new file mode 100644 index 00000000..07e8653c --- /dev/null +++ b/docs/language/text/text-length.md @@ -0,0 +1,27 @@ +--- +id: text-length +name: Text.length +category: text +kind: namespace-method +tokens: Text.length +sig: Text.length(s) -> int +tip: The number of bytes in a string. +order: 0 +ns: Text +member: length +--- + +Returns how many bytes are in s, not counting the terminating zero. It is the same count as the bare len(s), exposed under the Text namespace for discoverability. Use it to size a HUD field, walk a string by index, or check for emptiness with Text.length(s) == 0. + +Parameters: +- `s` — the string to measure + +```ludic +program NameWidth { + var label: str = "player one" + + handler Draw phase Render { + let width = Text.length(label) * 6 # 6 px per glyph + } +} +``` diff --git a/docs/language/text/text-lower.md b/docs/language/text/text-lower.md new file mode 100644 index 00000000..faff1e4c --- /dev/null +++ b/docs/language/text/text-lower.md @@ -0,0 +1,22 @@ +--- +id: text-lower +name: Text.lower +category: text +kind: namespace-method +tokens: Text.lower +sig: Text.lower(s) -> str +tip: A lowercased copy of a string. +order: 12 +ns: Text +member: lower +--- + +Returns a fresh string with every ASCII letter A-Z turned to lowercase; other bytes pass through unchanged. Pair it with Text.equals for case-insensitive matching by lowercasing both sides. Only ASCII is transformed. + +```ludic +program Demo { + handler Step phase Update { + if Text.equals(Text.lower(cmd), "quit") { stop() } + } +} +``` diff --git a/docs/language/text/text-pad_left.md b/docs/language/text/text-pad_left.md new file mode 100644 index 00000000..8e6dbb31 --- /dev/null +++ b/docs/language/text/text-pad_left.md @@ -0,0 +1,22 @@ +--- +id: text-pad_left +name: Text.pad_left +category: text +kind: namespace-method +tokens: Text.pad_left +sig: Text.pad_left(s, width) -> str +tip: Pad with spaces on the left to a width. +order: 15 +ns: Text +member: pad_left +--- + +Returns s padded with leading spaces until it is at least width bytes long; a string already that long is returned unchanged (never truncated). Right-aligns numbers and labels in a fixed-width HUD column. + +```ludic +program Demo { + handler Step phase Update { + let cell = Text.pad_left(Text.from_int(score), 6) + } +} +``` diff --git a/docs/language/text/text-pad_right.md b/docs/language/text/text-pad_right.md new file mode 100644 index 00000000..38ed6b51 --- /dev/null +++ b/docs/language/text/text-pad_right.md @@ -0,0 +1,22 @@ +--- +id: text-pad_right +name: Text.pad_right +category: text +kind: namespace-method +tokens: Text.pad_right +sig: Text.pad_right(s, width) -> str +tip: Pad with spaces on the right to a width. +order: 16 +ns: Text +member: pad_right +--- + +Returns s padded with trailing spaces until it is at least width bytes long; a string already that long is returned unchanged. Left-aligns text into fixed-width columns for tables and menus. + +```ludic +program Demo { + handler Step phase Update { + let cell = Text.pad_right(label, 12) + } +} +``` diff --git a/docs/language/text/text-repeat.md b/docs/language/text/text-repeat.md new file mode 100644 index 00000000..6909b0f6 --- /dev/null +++ b/docs/language/text/text-repeat.md @@ -0,0 +1,22 @@ +--- +id: text-repeat +name: Text.repeat +category: text +kind: namespace-method +tokens: Text.repeat +sig: Text.repeat(s, n) -> str +tip: A string repeated n times. +order: 14 +ns: Text +member: repeat +--- + +Returns s concatenated with itself n times; n <= 0 yields the empty string. Handy for drawing a text bar, an indent, or a separator line without a loop. + +```ludic +program Demo { + handler Step phase Update { + let bar = Text.repeat("#", filled) + } +} +``` diff --git a/docs/language/text/text-replace.md b/docs/language/text/text-replace.md new file mode 100644 index 00000000..c454d67c --- /dev/null +++ b/docs/language/text/text-replace.md @@ -0,0 +1,22 @@ +--- +id: text-replace +name: Text.replace +category: text +kind: namespace-method +tokens: Text.replace +sig: Text.replace(s, from, to) -> str +tip: Replace every occurrence of a substring. +order: 19 +ns: Text +member: replace +--- + +Returns a fresh string with every occurrence of from in s replaced by to; if from never appears the string is returned unchanged. Use it to substitute tokens in a template, swap a delimiter, or sanitize input. + +```ludic +program Demo { + handler Step phase Update { + let path = Text.replace(name, " ", "_") + } +} +``` diff --git a/docs/language/text/text-slice.md b/docs/language/text/text-slice.md new file mode 100644 index 00000000..d8f3b182 --- /dev/null +++ b/docs/language/text/text-slice.md @@ -0,0 +1,30 @@ +--- +id: text-slice +name: Text.slice +category: text +kind: namespace-method +tokens: Text.slice +sig: Text.slice(s, a, b) -> str +tip: A substring covering bytes [a, b). +order: 2 +ns: Text +member: slice +--- + +Returns a fresh string of the bytes from index a up to but not including b — the half-open range [a, b), so Text.slice("hello world", 0, 5) is "hello". It is the call form of the s[a..b] slice syntax and allocates a new string. Use it to cut a fixed-width field, drop a prefix, or take the first few characters of a name. + +Parameters: +- `s` — the source string +- `a` — the start byte index (inclusive) +- `b` — the end byte index (exclusive) + +```ludic +program FirstWord { + var line: str = "hello world" + + handler Split phase Update { + let space = Text.index_of(line, " ") # 5 + let word = Text.slice(line, 0, space) # "hello" + } +} +``` diff --git a/docs/language/text/text-split.md b/docs/language/text/text-split.md new file mode 100644 index 00000000..4b7893df --- /dev/null +++ b/docs/language/text/text-split.md @@ -0,0 +1,22 @@ +--- +id: text-split +name: Text.split +category: text +kind: namespace-method +tokens: Text.split +sig: Text.split(s, sep) -> []str +tip: Split a string on a separator into a list. +order: 17 +ns: Text +member: split +--- + +Splits s at every occurrence of the non-empty separator sep and returns the pieces as a []str — the inverse of Text.join. Adjacent separators yield empty pieces, and a string with no separator returns a one-element list holding the whole string. Use it to parse CSV rows, command arguments, or delimited save data. + +```ludic +program Demo { + handler Step phase Update { + let fields = Text.split(line, ",") + } +} +``` diff --git a/docs/language/text/text-starts_with.md b/docs/language/text/text-starts_with.md new file mode 100644 index 00000000..d371e12f --- /dev/null +++ b/docs/language/text/text-starts_with.md @@ -0,0 +1,30 @@ +--- +id: text-starts_with +name: Text.starts_with +category: text +kind: namespace-method +tokens: Text.starts_with +sig: Text.starts_with(s, prefix) -> bool +tip: Whether a string begins with a given prefix. +order: 3 +ns: Text +member: starts_with +--- + +Returns true when s begins with prefix, comparing byte for byte over the length of the prefix. An empty prefix always matches. Use it to route commands ("/help ..."), recognize a tag, or branch on a filename extension without slicing first. + +Parameters: +- `s` — the string to test +- `prefix` — the leading substring to look for + +```ludic +program Command { + var input: str = "/say hello" + + handler Parse phase Update { + if Text.starts_with(input, "/say ") { + let msg = Text.slice(input, 5, Text.length(input)) + } + } +} +``` diff --git a/docs/language/text/text-to_int.md b/docs/language/text/text-to_int.md new file mode 100644 index 00000000..1d300c93 --- /dev/null +++ b/docs/language/text/text-to_int.md @@ -0,0 +1,27 @@ +--- +id: text-to_int +name: Text.to_int +category: text +kind: namespace-method +tokens: Text.to_int +sig: Text.to_int(s) -> int +tip: Parse a leading integer from a string. +order: 9 +ns: Text +member: to_int +--- + +Reads an optional sign and the leading decimal digits of s and returns them as an int, stopping at the first non-digit — so Text.to_int("42abc") is 42. A string with no leading number yields 0. Use it to turn typed input, a config value, or a parsed field into a number. It is the inverse of Text.from_int. + +Parameters: +- `s` — the string to parse + +```ludic +program ParseAmount { + var typed: str = "250" + + handler Apply phase Update { + let gold = Text.to_int(typed) # 250 + } +} +``` diff --git a/docs/language/text/text-trim.md b/docs/language/text/text-trim.md new file mode 100644 index 00000000..fe5edb7d --- /dev/null +++ b/docs/language/text/text-trim.md @@ -0,0 +1,22 @@ +--- +id: text-trim +name: Text.trim +category: text +kind: namespace-method +tokens: Text.trim +sig: Text.trim(s) -> str +tip: A copy with surrounding whitespace removed. +order: 13 +ns: Text +member: trim +--- + +Returns a fresh string with leading and trailing whitespace (spaces, tabs, newlines, carriage returns) removed; inner spacing is kept. Use it to clean up typed input or a parsed field before comparing or storing it. + +```ludic +program Demo { + handler Step phase Update { + let name = Text.trim(raw_input) + } +} +``` diff --git a/docs/language/text/text-upper.md b/docs/language/text/text-upper.md new file mode 100644 index 00000000..ccf0a911 --- /dev/null +++ b/docs/language/text/text-upper.md @@ -0,0 +1,22 @@ +--- +id: text-upper +name: Text.upper +category: text +kind: namespace-method +tokens: Text.upper +sig: Text.upper(s) -> str +tip: An uppercased copy of a string. +order: 11 +ns: Text +member: upper +--- + +Returns a fresh string with every ASCII letter a-z turned to uppercase; other bytes pass through unchanged. The input is left untouched. Use it to normalize input before comparing, or to shout a label. Only ASCII is transformed. + +```ludic +program Demo { + handler Step phase Update { + let shout = Text.upper("ready") # "READY" + } +} +``` diff --git a/docs/language/time/_section.md b/docs/language/time/_section.md new file mode 100644 index 00000000..9e928681 --- /dev/null +++ b/docs/language/time/_section.md @@ -0,0 +1,7 @@ +--- +id: time +title: Time +order: 6 +--- + +The frame clock. frame/elapsed/delta are deterministic (driven by a per-frame counter at a fixed 60 fps), so a replay reproduces every value; now is the wall clock and is explicitly non-deterministic. diff --git a/docs/language/time/time-delta.md b/docs/language/time/time-delta.md new file mode 100644 index 00000000..3f0f2621 --- /dev/null +++ b/docs/language/time/time-delta.md @@ -0,0 +1,22 @@ +--- +id: time-delta +name: Time.delta +category: time +kind: namespace-method +tokens: Time.delta +sig: Time.delta() -> fixed +tip: Seconds per frame (a fixed 1/60). +order: 1 +ns: Time +member: delta +--- + +Returns the duration of one frame in seconds as a fixed — a constant 1/60, since the frame clock is fixed-step. Multiply a per-second rate by it to advance movement or timers by one frame's worth. + +```ludic +program Demo { + handler Step phase Update { + x = x + speed_per_second * Time.delta() + } +} +``` diff --git a/docs/language/time/time-elapsed.md b/docs/language/time/time-elapsed.md new file mode 100644 index 00000000..d0149add --- /dev/null +++ b/docs/language/time/time-elapsed.md @@ -0,0 +1,22 @@ +--- +id: time-elapsed +name: Time.elapsed +category: time +kind: namespace-method +tokens: Time.elapsed +sig: Time.elapsed() -> fixed +tip: Seconds since start (deterministic). +order: 2 +ns: Time +member: elapsed +--- + +Returns the time since the program started, in seconds, as a fixed — exactly Time.frame() divided by 60. Deterministic and replay-safe. Use it for wave timers, day/night cycles, and anything paced in seconds. + +```ludic +program Demo { + handler Step phase Update { + if Time.elapsed() > 10.0 { start_wave() } + } +} +``` diff --git a/docs/language/time/time-frame.md b/docs/language/time/time-frame.md new file mode 100644 index 00000000..bb17a93d --- /dev/null +++ b/docs/language/time/time-frame.md @@ -0,0 +1,22 @@ +--- +id: time-frame +name: Time.frame +category: time +kind: namespace-method +tokens: Time.frame +sig: Time.frame() -> int +tip: The number of frames elapsed since start. +order: 0 +ns: Time +member: frame +--- + +Returns how many frames have completed since the program started, incrementing once per frame. Deterministic — the same replay reaches the same frame count. Use it to time events (if Time.frame() % 30 == 0), drive animations, or seed per-frame variation. + +```ludic +program Demo { + handler Step phase Update { + if Time.frame() % 60 == 0 { tick() } + } +} +``` diff --git a/docs/language/time/time-now.md b/docs/language/time/time-now.md new file mode 100644 index 00000000..b52a37d6 --- /dev/null +++ b/docs/language/time/time-now.md @@ -0,0 +1,22 @@ +--- +id: time-now +name: Time.now +category: time +kind: namespace-method +tokens: Time.now +sig: Time.now() -> int +tip: Wall-clock seconds (non-deterministic). +order: 3 +ns: Time +member: now +--- + +Returns the real-world time in seconds since the Unix epoch. This is the wall clock and is non-deterministic — never feed it into the lockstep simulation or a replay. Use it only for seeding Random.seed or for telemetry. + +```ludic +program Demo { + handler Step phase Update { + Random.seed(value: Time.now()) + } +} +``` diff --git a/docs/language/world/_section.md b/docs/language/world/_section.md new file mode 100644 index 00000000..898ba0d2 --- /dev/null +++ b/docs/language/world/_section.md @@ -0,0 +1,7 @@ +--- +id: world +title: World +order: 6 +--- + +Runtime reflection over the ECS world — read and write component fields by id, spawn and inspect entities, and register components at runtime. The introspection layer a mod uses. diff --git a/docs/language/world/world-attach.md b/docs/language/world/world-attach.md new file mode 100644 index 00000000..eb92c29e --- /dev/null +++ b/docs/language/world/world-attach.md @@ -0,0 +1,14 @@ +--- +id: world-attach +name: World.attach +category: world +kind: namespace-method +tokens: World.attach +sig: World.attach(entity, prop_id) -> void +tip: Attach a component to an entity at runtime. +order: 13 +ns: World +member: attach +--- + +Adds component prop_id to entity, so World.get/set/has then work on it. diff --git a/docs/language/world/world-count.md b/docs/language/world/world-count.md new file mode 100644 index 00000000..24cd6c7f --- /dev/null +++ b/docs/language/world/world-count.md @@ -0,0 +1,14 @@ +--- +id: world-count +name: World.count +category: world +kind: namespace-method +tokens: World.count +sig: World.count() -> int +tip: The number of live entities. +order: 3 +ns: World +member: count +--- + +Returns how many entities currently exist in the world. diff --git a/docs/language/world/world-detach.md b/docs/language/world/world-detach.md new file mode 100644 index 00000000..02383d48 --- /dev/null +++ b/docs/language/world/world-detach.md @@ -0,0 +1,14 @@ +--- +id: world-detach +name: World.detach +category: world +kind: namespace-method +tokens: World.detach +sig: World.detach(entity, prop_id) -> void +tip: Detach a component from an entity at runtime. +order: 14 +ns: World +member: detach +--- + +Removes component prop_id from entity — the inverse of World.attach. diff --git a/docs/language/world/world-field_id.md b/docs/language/world/world-field_id.md new file mode 100644 index 00000000..705a261f --- /dev/null +++ b/docs/language/world/world-field_id.md @@ -0,0 +1,14 @@ +--- +id: world-field_id +name: World.field_id +category: world +kind: namespace-method +tokens: World.field_id +sig: World.field_id(prop_id, name) -> int +tip: Look up a field's id by name. +order: 9 +ns: World +member: field_id +--- + +Returns the numeric id of field name within component prop_id. diff --git a/docs/language/world/world-get.md b/docs/language/world/world-get.md new file mode 100644 index 00000000..24af96b1 --- /dev/null +++ b/docs/language/world/world-get.md @@ -0,0 +1,14 @@ +--- +id: world-get +name: World.get +category: world +kind: namespace-method +tokens: World.get +sig: World.get(prop_id, field_id, entity) -> int +tip: Read a component field by id. +order: 0 +ns: World +member: get +--- + +Reads the value of field field_id of component prop_id on entity, by numeric id rather than by name — the reflective form the bare world_get provides. diff --git a/docs/language/world/world-has.md b/docs/language/world/world-has.md new file mode 100644 index 00000000..4d8e0fab --- /dev/null +++ b/docs/language/world/world-has.md @@ -0,0 +1,14 @@ +--- +id: world-has +name: World.has +category: world +kind: namespace-method +tokens: World.has +sig: World.has(entity, prop_id) -> int +tip: Does an entity have a component? +order: 2 +ns: World +member: has +--- + +Returns non-zero when entity carries the component prop_id. Use it before World.get on a dynamically-attached component. diff --git a/docs/language/world/world-kind.md b/docs/language/world/world-kind.md new file mode 100644 index 00000000..497f69e9 --- /dev/null +++ b/docs/language/world/world-kind.md @@ -0,0 +1,14 @@ +--- +id: world-kind +name: World.kind +category: world +kind: namespace-method +tokens: World.kind +sig: World.kind(entity) -> int +tip: The model id of an entity. +order: 11 +ns: World +member: kind +--- + +Returns the model id that entity was spawned as. diff --git a/docs/language/world/world-load.md b/docs/language/world/world-load.md new file mode 100644 index 00000000..af56e019 --- /dev/null +++ b/docs/language/world/world-load.md @@ -0,0 +1,14 @@ +--- +id: world-load +name: World.load +category: world +kind: namespace-method +tokens: World.load +sig: World.load(buf, len) -> void +tip: Restore the world from a buffer. +order: 7 +ns: World +member: load +--- + +Replaces the current world with the snapshot in the first len bytes of buf — the inverse of World.save. diff --git a/docs/language/world/world-model_id.md b/docs/language/world/world-model_id.md new file mode 100644 index 00000000..4fd65eca --- /dev/null +++ b/docs/language/world/world-model_id.md @@ -0,0 +1,14 @@ +--- +id: world-model_id +name: World.model_id +category: world +kind: namespace-method +tokens: World.model_id +sig: World.model_id(name) -> int +tip: Look up a model's id by name. +order: 10 +ns: World +member: model_id +--- + +Returns the numeric id of the model named name, for passing to World.spawn. diff --git a/docs/language/world/world-prop_id.md b/docs/language/world/world-prop_id.md new file mode 100644 index 00000000..ddd93a00 --- /dev/null +++ b/docs/language/world/world-prop_id.md @@ -0,0 +1,14 @@ +--- +id: world-prop_id +name: World.prop_id +category: world +kind: namespace-method +tokens: World.prop_id +sig: World.prop_id(name) -> int +tip: Look up a component's id by name. +order: 8 +ns: World +member: prop_id +--- + +Returns the numeric id of the component named name, for use with the by-id reflection calls. diff --git a/docs/language/world/world-query_next.md b/docs/language/world/world-query_next.md new file mode 100644 index 00000000..f0eae151 --- /dev/null +++ b/docs/language/world/world-query_next.md @@ -0,0 +1,14 @@ +--- +id: world-query_next +name: World.query_next +category: world +kind: namespace-method +tokens: World.query_next +sig: World.query_next(query_id, cursor) -> int +tip: Advance a reflective query. +order: 15 +ns: World +member: query_next +--- + +Returns the next entity matching query query_id after cursor, or a terminal value when the query is exhausted. diff --git a/docs/language/world/world-register_prop.md b/docs/language/world/world-register_prop.md new file mode 100644 index 00000000..31402d9d --- /dev/null +++ b/docs/language/world/world-register_prop.md @@ -0,0 +1,14 @@ +--- +id: world-register_prop +name: World.register_prop +category: world +kind: namespace-method +tokens: World.register_prop +sig: World.register_prop(name, size) -> int +tip: Register a new component at runtime. +order: 12 +ns: World +member: register_prop +--- + +Declares a brand-new component named name holding size integer fields and returns its id — a component the game's source never wrote, for mods. diff --git a/docs/language/world/world-save.md b/docs/language/world/world-save.md new file mode 100644 index 00000000..d31fe86f --- /dev/null +++ b/docs/language/world/world-save.md @@ -0,0 +1,14 @@ +--- +id: world-save +name: World.save +category: world +kind: namespace-method +tokens: World.save +sig: World.save(buf) -> int +tip: Serialize the world into a buffer. +order: 6 +ns: World +member: save +--- + +Writes a binary snapshot of the whole ECS world into buf and returns the number of bytes written. Size the buffer with World.size. diff --git a/docs/language/world/world-set.md b/docs/language/world/world-set.md new file mode 100644 index 00000000..ca9a2971 --- /dev/null +++ b/docs/language/world/world-set.md @@ -0,0 +1,14 @@ +--- +id: world-set +name: World.set +category: world +kind: namespace-method +tokens: World.set +sig: World.set(prop_id, field_id, entity, value) -> void +tip: Write a component field by id. +order: 1 +ns: World +member: set +--- + +Writes value into field field_id of component prop_id on entity. The reflective counterpart to World.get. diff --git a/docs/language/world/world-size.md b/docs/language/world/world-size.md new file mode 100644 index 00000000..76a41f73 --- /dev/null +++ b/docs/language/world/world-size.md @@ -0,0 +1,14 @@ +--- +id: world-size +name: World.size +category: world +kind: namespace-method +tokens: World.size +sig: World.size() -> int +tip: The serialized size of the world. +order: 4 +ns: World +member: size +--- + +Returns the number of bytes a full World.save snapshot of the current world would take, for sizing a buffer. diff --git a/docs/language/world/world-spawn.md b/docs/language/world/world-spawn.md new file mode 100644 index 00000000..86bba025 --- /dev/null +++ b/docs/language/world/world-spawn.md @@ -0,0 +1,14 @@ +--- +id: world-spawn +name: World.spawn +category: world +kind: namespace-method +tokens: World.spawn +sig: World.spawn(model_id) -> entity +tip: Spawn an entity of a model by id. +order: 5 +ns: World +member: spawn +--- + +Creates a new entity of model model_id and returns it — the reflective form of the spawn statement. diff --git a/examples/detach.ludic b/examples/detach.ludic index 3ce47358..21236c1c 100644 --- a/examples/detach.ludic +++ b/examples/detach.ludic @@ -11,7 +11,7 @@ # 25 @OnDetach(Shield): reads the outgoing amount 5, prints 5 + 20 # 0 the Shield is gone — nothing matches # -# ./selfhost/game-build.sh build/ludicc examples/detach.ludic /tmp/detach +# bin/x game-build bin/ludicc examples/detach.ludic /tmp/detach # /tmp/detach = 3 { + print(Math.floor(Time.elapsed() * 100.0)) + print(Math.floor(Time.delta() * 1000.0)) + quit() + } + } +} diff --git a/runtime/native/core.ludic b/runtime/native/core.ludic index 2a3a5f39..4b38cfd1 100644 --- a/runtime/native/core.ludic +++ b/runtime/native/core.ludic @@ -101,6 +101,77 @@ fn rt_frame_rect(x: int, y: int, w: int, h: int, c: int) -> void { rt_fill_rect(x + w - 1, y, 1, h, c) } +# A straight line by Bresenham's algorithm — integer only, any direction. +fn rt_line(x0: int, y0: int, x1: int, y1: int, c: int) -> void { + var x = x0; var y = y0 + let dx = abs(x1 - x0); let dy = 0 - abs(y1 - y0) + var sx = 0 - 1; if x0 < x1 { sx = 1 } + var sy = 0 - 1; if y0 < y1 { sy = 1 } + var err = dx + dy + while true { + rt_put_px(x, y, c) + if (x == x1) and (y == y1) { return } + let e2 = 2 * err + if e2 >= dy { err = err + dy; x = x + sx } + if e2 <= dx { err = err + dx; y = y + sy } + } +} + +# A circle outline by the midpoint algorithm (eight-way symmetry). +fn rt_circle(cx: int, cy: int, r: int, c: int) -> void { + if r < 0 { return } + var x = r; var y = 0; var err = 1 - r + while x >= y { + rt_put_px(cx + x, cy + y, c); rt_put_px(cx + y, cy + x, c) + rt_put_px(cx - y, cy + x, c); rt_put_px(cx - x, cy + y, c) + rt_put_px(cx - x, cy - y, c); rt_put_px(cx - y, cy - x, c) + rt_put_px(cx + y, cy - x, c); rt_put_px(cx + x, cy - y, c) + y = y + 1 + if err < 0 { err = err + 2 * y + 1 } + else { x = x - 1; err = err + 2 * (y - x) + 1 } + } +} + +# A filled disc — one horizontal span per row, width from the circle equation. +fn rt_fill_circle(cx: int, cy: int, r: int, c: int) -> void { + if r < 0 { return } + let r2 = r * r + var dy = 0 - r + while dy <= r { + var dx = 0 + while (dx + 1) * (dx + 1) + dy * dy <= r2 { dx = dx + 1 } + rt_fill_rect(cx - dx, cy + dy, 2 * dx + 1, 1, c) + dy = dy + 1 + } +} + +# A triangle outline — three lines. +fn rt_triangle(x0: int, y0: int, x1: int, y1: int, x2: int, y2: int, c: int) -> void { + rt_line(x0, y0, x1, y1, c) + rt_line(x1, y1, x2, y2, c) + rt_line(x2, y2, x0, y0, c) +} + +# A filled triangle — bounding-box scan with an edge-sign inside test. +fn rt_fill_triangle(x0: int, y0: int, x1: int, y1: int, x2: int, y2: int, c: int) -> void { + let minx = min(x0, min(x1, x2)); let maxx = max(x0, max(x1, x2)) + let miny = min(y0, min(y1, y2)); let maxy = max(y0, max(y1, y2)) + var py = miny + while py <= maxy { + var px = minx + while px <= maxx { + let d0 = (x1 - x0) * (py - y0) - (y1 - y0) * (px - x0) + let d1 = (x2 - x1) * (py - y1) - (y2 - y1) * (px - x1) + let d2 = (x0 - x2) * (py - y2) - (y0 - y2) * (px - x2) + let neg = (d0 < 0) or (d1 < 0) or (d2 < 0) + let pos = (d0 > 0) or (d1 > 0) or (d2 > 0) + if not (neg and pos) { rt_put_px(px, py, c) } + px = px + 1 + } + py = py + 1 + } +} + # Windowed: hand the framebuffer to the platform layer, which blits it into # the view. Headless: nothing to do until shutdown writes the last frame out. fn rt_present() -> void { @@ -216,6 +287,24 @@ fn rt_rng_chance(pct: int) -> bool { return rt_next_rand() % 100 < pct } +# a deterministic fixed-point value in [0, 1) — the raw 0..65535 is exactly the +# Q16.16 fraction (fixed and int share the i32 representation). +fn rt_rng_value() -> fixed { + return rt_rng_range(0, 65535) +} + +# a deterministic integer in [0, max) — 0 when max <= 0 +fn rt_rng_int(max: int) -> int { + if max <= 0 { return 0 } + return rt_rng_range(0, max - 1) +} + +# a deterministic +1 or -1 +fn rt_rng_sign() -> int { + if rt_rng_chance(50) { return 1 } + return 0 - 1 +} + # ---- platform: input ------------------------------------------------------ fn rt_poll() -> int { if is_windowed() { diff --git a/selfhost/bootstrap-cfree.sh b/selfhost/bootstrap-cfree.sh deleted file mode 100755 index 35fe0c66..00000000 --- a/selfhost/bootstrap-cfree.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# bootstrap-cfree.sh — rebuild the self-hosted compiler with NO C compiler. -# -# The C `ludicc` is retired to a one-time seed: selfhost/ludicc.seed.ll is the -# self-host compiler's own LLVM IR, a proven fixed point. From it plus clang -# (an IR assembler, the same floor Rust and Swift stand on) the compiler -# rebuilds itself and reproduces its own IR — the C source is never invoked. -# -# seed.ll --clang--> sh_seed -# sh_seed compiles selfhost.ludic -> out.ll -# assert out.ll == seed.ll (the seed is a true fixed point) -set -u -cd "$(dirname "$0")/.." -CC="${LUDIC_CC:-clang}" -B=build/cfree -mkdir -p "$B" - -# assemble the compiler straight from the checked-in seed — no C involved -$CC selfhost/ludicc.seed.ll -o "$B/sh_seed" 2>/dev/null || { echo "FAIL: assemble seed"; exit 1; } -echo " seed.ll --clang--> sh_seed (no C compiler used)" - -# regenerate the concatenated source the same way build.sh does (pure shell) -FRAGS="selfhost/str.ludic selfhost/buf.ludic selfhost/io.ludic selfhost/ast.ludic -selfhost/lex.ludic selfhost/parse.ludic selfhost/parse_game.ludic selfhost/emit_core.ludic selfhost/emit_head.ludic -selfhost/emit_addr.ludic selfhost/emit_intrin.ludic selfhost/emit_intrin2.ludic selfhost/emit_math.ludic selfhost/emit_new.ludic -selfhost/emit_expr.ludic selfhost/emit_stmt.ludic selfhost/emit_ecs.ludic selfhost/emit_query.ludic selfhost/emit_spawn.ludic selfhost/emit_game.ludic selfhost/emit_machine.ludic selfhost/emit_save.ludic -selfhost/emit_net.ludic selfhost/emit_ui.ludic selfhost/emit_decl.ludic selfhost/main.ludic" -{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" - -# the seed-built compiler compiles its own source -"$B/sh_seed" "$B/selfhost.ludic" > "$B/out.ll" 2>/dev/null || { echo "FAIL: seed compiler self-compile"; exit 1; } -echo " sh_seed compiles selfhost.ludic -> out.ll ($(wc -l < "$B/out.ll" | tr -d ' ') lines)" - -if cmp -s "$B/out.ll" selfhost/ludicc.seed.ll; then - echo " ✅ out.ll == seed.ll — the compiler rebuilds itself with no C compiler" - exit 0 -else - echo " â�Œ out.ll != seed.ll (seed is stale — regenerate with ./selfhost/reseed.sh)" - diff "$B/out.ll" selfhost/ludicc.seed.ll | head - exit 1 -fi diff --git a/selfhost/bootstrap.sh b/selfhost/bootstrap.sh deleted file mode 100755 index 68658094..00000000 --- a/selfhost/bootstrap.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# bootstrap.sh — the self-hosting proof. -# -# stage0: the C compiler (build/ludicc) compiles the self-host source -> gen1 -# stage1: gen1 compiles the self-host source -> gen2 -# stage2: gen2 compiles the self-host source -> gen3 -# assert: gen2.ll == gen3.ll (the compiler reproduces itself exactly) -# -# gen1 is built by a *different* compiler (the C one), so its IR legitimately -# differs; gen2 == gen3 is the fixpoint that proves independence. -set -u -cd "$(dirname "$0")/.." -CC="${LUDIC_CC:-clang}" -B=build/boot -mkdir -p "$B" -say() { printf " %s\n" "$1"; } - -# stage 0: C compiler builds the self-host compiler (also writes build/selfhost.ludic) -./selfhost/build.sh build/ludicc "$B/gen1" >/dev/null 2>&1 || { echo "FAIL: stage0 build"; exit 1; } -say "stage0: C ludicc -> gen1 (self-host compiler)" - -# stage 1: gen1 compiles the self-host source to IR, assemble -> gen2 -"$B/gen1" build/selfhost.ludic > "$B/gen2.ll" 2>/dev/null || { echo "FAIL: gen1 self-compile"; exit 1; } -$CC "$B/gen2.ll" -o "$B/gen2" 2>/dev/null || { echo "FAIL: gen2 assemble"; exit 1; } -say "stage1: gen1 -> gen2.ll ($(wc -l < "$B/gen2.ll" | tr -d ' ') lines) -> gen2" - -# stage 2: gen2 compiles the self-host source to IR -> gen3 -"$B/gen2" build/selfhost.ludic > "$B/gen3.ll" 2>/dev/null || { echo "FAIL: gen2 self-compile"; exit 1; } -say "stage2: gen2 -> gen3.ll ($(wc -l < "$B/gen3.ll" | tr -d ' ') lines)" - -# the fixpoint -if cmp -s "$B/gen2.ll" "$B/gen3.ll"; then - rm -f build/selfhost.ludic - echo " ✅ FIXPOINT: gen2.ll == gen3.ll — the self-hosted compiler reproduces itself" - exit 0 -else - echo " â�Œ gen2.ll != gen3.ll" - diff "$B/gen2.ll" "$B/gen3.ll" | head - exit 1 -fi diff --git a/selfhost/build.sh b/selfhost/build.sh deleted file mode 100755 index 4951b444..00000000 --- a/selfhost/build.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# build.sh — assemble the self-host compiler from its fragments and compile it -# with the given ludicc (default: the C build/ludicc). -# ./selfhost/build.sh [ludicc] [outbin] -set -u -cd "$(dirname "$0")/.." -LC="${1:-build/ludicc}" -OUT="${2:-build/selfhost}" -mkdir -p build -FRAGS="selfhost/str.ludic -selfhost/buf.ludic -selfhost/io.ludic -selfhost/ast.ludic -selfhost/lex.ludic -selfhost/parse.ludic -selfhost/parse_game.ludic -selfhost/emit_core.ludic -selfhost/emit_head.ludic -selfhost/emit_addr.ludic -selfhost/emit_intrin.ludic -selfhost/emit_intrin2.ludic -selfhost/emit_math.ludic -selfhost/emit_new.ludic -selfhost/emit_expr.ludic -selfhost/emit_stmt.ludic -selfhost/emit_ecs.ludic -selfhost/emit_query.ludic -selfhost/emit_spawn.ludic -selfhost/emit_game.ludic -selfhost/emit_machine.ludic -selfhost/emit_save.ludic -selfhost/emit_net.ludic -selfhost/emit_ui.ludic -selfhost/emit_decl.ludic -selfhost/main.ludic" -SRC=build/selfhost.ludic -{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$SRC" -# the compiler emits IR to stdout; clang assembles and links it -"$LC" "$SRC" > "$OUT.ll" 2>/dev/null && ${LUDIC_CC:-clang} "$OUT.ll" -o "$OUT" 2>/dev/null -rc=$?; rm -f "$OUT.ll"; [ $rc -eq 0 ] diff --git a/selfhost/compile.sh b/selfhost/compile.sh deleted file mode 100755 index cd7b0e90..00000000 --- a/selfhost/compile.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -# compile.sh — compile a .ludic file with the self-hosted compiler and link it. -# ./selfhost/compile.sh -set -eu -cd "$(dirname "$0")/.." -SH="$1"; IN="$2"; OUT="$3" -"$SH" "$IN" > "$OUT.ll" -clang "$OUT.ll" -o "$OUT" diff --git a/selfhost/emit_collide.ludic b/selfhost/emit_collide.ludic new file mode 100644 index 00000000..321900f1 --- /dev/null +++ b/selfhost/emit_collide.ludic @@ -0,0 +1,86 @@ +# emit_collide.ludic — the Collide.* namespace: 2D overlap tests on plain +# integer coordinates (pixels or tiles). Rectangles are (x, y, w, h) with the +# origin at the top-left; circles are (x, y, r). Squared distances use i64 so a +# large coordinate can't overflow. Each returns a bool. + +fn is_collide_ns(meth: ptr) -> bool { + if (meth == "rects") or (meth == "point_rect") { return true } + if (meth == "circles") or (meth == "rect_circle") { return true } + return false +} + +# dx*dx + dy*dy widened to i64 (no overflow for 32-bit deltas) +fn coll_sq_sum(dx: ptr, dy: ptr) -> ptr { + let dx64 = emit_bind(`sext i32 {dx} to i64`) + let dy64 = emit_bind(`sext i32 {dy} to i64`) + let xx = emit_bind(`mul i64 {dx64}, {dx64}`) + let yy = emit_bind(`mul i64 {dy64}, {dy64}`) + return emit_bind(`add i64 {xx}, {yy}`) +} + +# max(lo, min(v, hi)) — clamp v into [lo, hi] +fn coll_clamp(v: ptr, lo: ptr, hi: ptr) -> ptr { + let c1 = emit_bind(`icmp slt i32 {v}, {hi}`) + let t = emit_bind(`select i1 {c1}, i32 {v}, i32 {hi}`) + let c2 = emit_bind(`icmp sgt i32 {lo}, {t}`) + return emit_bind(`select i1 {c2}, i32 {lo}, i32 {t}`) +} + +fn emit_collide_ns(meth: ptr, e: Node) -> Val { + if (meth == "rects") { # AABB overlap of two rects + let ax = emit_expr(e.kids[0]); let ay = emit_expr(e.kids[1]); let aw = emit_expr(e.kids[2]); let ah = emit_expr(e.kids[3]) + let bx = emit_expr(e.kids[4]); let by = emit_expr(e.kids[5]); let bw = emit_expr(e.kids[6]); let bh = emit_expr(e.kids[7]) + let axw = emit_bind(`add i32 {ax.code}, {aw.code}`) + let bxw = emit_bind(`add i32 {bx.code}, {bw.code}`) + let ayh = emit_bind(`add i32 {ay.code}, {ah.code}`) + let byh = emit_bind(`add i32 {by.code}, {bh.code}`) + let c1 = emit_bind(`icmp slt i32 {ax.code}, {bxw}`) + let c2 = emit_bind(`icmp slt i32 {bx.code}, {axw}`) + let c3 = emit_bind(`icmp slt i32 {ay.code}, {byh}`) + let c4 = emit_bind(`icmp slt i32 {by.code}, {ayh}`) + let x = emit_bind(`and i1 {c1}, {c2}`) + let y = emit_bind(`and i1 {c3}, {c4}`) + let r = emit_bind(`and i1 {x}, {y}`) + return val(emit_bind(`zext i1 {r} to i32`), "bool") + } + if (meth == "point_rect") { # is a point inside a rect + let px = emit_expr(e.kids[0]); let py = emit_expr(e.kids[1]) + let rx = emit_expr(e.kids[2]); let ry = emit_expr(e.kids[3]); let rw = emit_expr(e.kids[4]); let rh = emit_expr(e.kids[5]) + let rxw = emit_bind(`add i32 {rx.code}, {rw.code}`) + let ryh = emit_bind(`add i32 {ry.code}, {rh.code}`) + let c1 = emit_bind(`icmp sge i32 {px.code}, {rx.code}`) + let c2 = emit_bind(`icmp slt i32 {px.code}, {rxw}`) + let c3 = emit_bind(`icmp sge i32 {py.code}, {ry.code}`) + let c4 = emit_bind(`icmp slt i32 {py.code}, {ryh}`) + let x = emit_bind(`and i1 {c1}, {c2}`) + let y = emit_bind(`and i1 {c3}, {c4}`) + let r = emit_bind(`and i1 {x}, {y}`) + return val(emit_bind(`zext i1 {r} to i32`), "bool") + } + if (meth == "circles") { # do two circles overlap + let ax = emit_expr(e.kids[0]); let ay = emit_expr(e.kids[1]); let ar = emit_expr(e.kids[2]) + let bx = emit_expr(e.kids[3]); let by = emit_expr(e.kids[4]); let br = emit_expr(e.kids[5]) + let dx = emit_bind(`sub i32 {ax.code}, {bx.code}`) + let dy = emit_bind(`sub i32 {ay.code}, {by.code}`) + let d2 = coll_sq_sum(dx, dy) + let rs = emit_bind(`add i32 {ar.code}, {br.code}`) + let rs64 = emit_bind(`sext i32 {rs} to i64`) + let r2 = emit_bind(`mul i64 {rs64}, {rs64}`) + let le = emit_bind(`icmp sle i64 {d2}, {r2}`) + return val(emit_bind(`zext i1 {le} to i32`), "bool") + } + # rect_circle: nearest point on the rect to the circle centre, within radius + let rx = emit_expr(e.kids[0]); let ry = emit_expr(e.kids[1]); let rw = emit_expr(e.kids[2]); let rh = emit_expr(e.kids[3]) + let cx = emit_expr(e.kids[4]); let cy = emit_expr(e.kids[5]); let cr = emit_expr(e.kids[6]) + let rxw = emit_bind(`add i32 {rx.code}, {rw.code}`) + let ryh = emit_bind(`add i32 {ry.code}, {rh.code}`) + let clx = coll_clamp(cx.code, rx.code, rxw) + let cly = coll_clamp(cy.code, ry.code, ryh) + let dx = emit_bind(`sub i32 {cx.code}, {clx}`) + let dy = emit_bind(`sub i32 {cy.code}, {cly}`) + let d2 = coll_sq_sum(dx, dy) + let cr64 = emit_bind(`sext i32 {cr.code} to i64`) + let r2 = emit_bind(`mul i64 {cr64}, {cr64}`) + let le = emit_bind(`icmp sle i64 {d2}, {r2}`) + return val(emit_bind(`zext i1 {le} to i32`), "bool") +} diff --git a/selfhost/emit_colorfn.ludic b/selfhost/emit_colorfn.ludic new file mode 100644 index 00000000..e9bfae74 --- /dev/null +++ b/selfhost/emit_colorfn.ludic @@ -0,0 +1,74 @@ +# emit_colorfn.ludic — the Color.* function surface (Color.Name constants are +# resolved at compile time elsewhere). Colors are 0x00RRGGBB ints; these build +# and blend them with plain integer/fixed math. rgb/rgba pack channels; lerp/ +# darken/lighten/with_alpha transform an existing color. + +fn is_colorfn_ns(meth: ptr) -> bool { + if (meth == "rgb") or (meth == "rgba") or (meth == "lerp") { return true } + if (meth == "darken") or (meth == "lighten") or (meth == "with_alpha") { return true } + return false +} + +# (c >> shift) & 255 -> code of a channel value +fn color_ch(c: ptr, shift: ptr) -> ptr { + let sh = emit_bind(`lshr i32 {c}, {shift}`) + return emit_bind(`and i32 {sh}, 255`) +} + +# (r << 16) | (g << 8) | b -> code of a packed color +fn color_pack(r: ptr, g: ptr, b: ptr) -> ptr { + let r16 = emit_bind(`shl i32 {r}, 16`) + let g8 = emit_bind(`shl i32 {g}, 8`) + let rg = emit_bind(`or i32 {r16}, {g8}`) + return emit_bind(`or i32 {rg}, {b}`) +} + +# ch0 + ((ch1 - ch0) * t >> 16), t a fixed 0..1 -> code of a blended channel +fn color_lerp_ch(ch0: ptr, ch1: ptr, t: ptr) -> ptr { + let d = emit_bind(`sub i32 {ch1}, {ch0}`) + let dt = emit_bind(`mul i32 {d}, {t}`) + let dsh = emit_bind(`ashr i32 {dt}, 16`) + return emit_bind(`add i32 {ch0}, {dsh}`) +} + +fn emit_colorfn_ns(meth: ptr, e: Node) -> Val { + if (meth == "rgb") { # rgb(r, g, b) -> 0xRRGGBB + let r = emit_expr(e.kids[0]); let g = emit_expr(e.kids[1]); let b = emit_expr(e.kids[2]) + return val(color_pack(r.code, g.code, b.code), "int") + } + if (meth == "rgba") { # rgba(r, g, b, a) -> 0xAARRGGBB + let r = emit_expr(e.kids[0]); let g = emit_expr(e.kids[1]); let b = emit_expr(e.kids[2]); let a = emit_expr(e.kids[3]) + let base = color_pack(r.code, g.code, b.code) + let a24 = emit_bind(`shl i32 {a.code}, 24`) + return val(emit_bind(`or i32 {base}, {a24}`), "int") + } + if (meth == "with_alpha") { # replace the alpha byte + let c = emit_expr(e.kids[0]); let a = emit_expr(e.kids[1]) + let rgb = emit_bind(`and i32 {c.code}, 16777215`) # c & 0x00FFFFFF + let a24 = emit_bind(`shl i32 {a.code}, 24`) + return val(emit_bind(`or i32 {rgb}, {a24}`), "int") + } + if (meth == "lerp") { # blend two colors by t (fixed 0..1) + let c0 = emit_expr(e.kids[0]); let c1 = emit_expr(e.kids[1]); let t = emit_expr(e.kids[2]) + let r = color_lerp_ch(color_ch(c0.code, "16"), color_ch(c1.code, "16"), t.code) + let g = color_lerp_ch(color_ch(c0.code, "8"), color_ch(c1.code, "8"), t.code) + let b = color_lerp_ch(color_ch(c0.code, "0"), color_ch(c1.code, "0"), t.code) + return val(color_pack(r, g, b), "int") + } + if (meth == "darken") { # scale channels by (1 - amount) + let c = emit_expr(e.kids[0]); let amt = emit_expr(e.kids[1]) + let factor = emit_bind(`sub i32 65536, {amt.code}`) + let r0 = color_ch(c.code, "16"); let g0 = color_ch(c.code, "8"); let b0 = color_ch(c.code, "0") + let rm = emit_bind(`mul i32 {r0}, {factor}`); let r = emit_bind(`ashr i32 {rm}, 16`) + let gm = emit_bind(`mul i32 {g0}, {factor}`); let g = emit_bind(`ashr i32 {gm}, 16`) + let bm = emit_bind(`mul i32 {b0}, {factor}`); let b = emit_bind(`ashr i32 {bm}, 16`) + return val(color_pack(r, g, b), "int") + } + # lighten: ch + (255 - ch) * amount + let c = emit_expr(e.kids[0]); let amt = emit_expr(e.kids[1]) + let r0 = color_ch(c.code, "16"); let g0 = color_ch(c.code, "8"); let b0 = color_ch(c.code, "0") + let rr = emit_bind(`sub i32 255, {r0}`); let rm = emit_bind(`mul i32 {rr}, {amt.code}`); let rt = emit_bind(`ashr i32 {rm}, 16`); let r = emit_bind(`add i32 {r0}, {rt}`) + let gr = emit_bind(`sub i32 255, {g0}`); let gm = emit_bind(`mul i32 {gr}, {amt.code}`); let gt = emit_bind(`ashr i32 {gm}, 16`); let g = emit_bind(`add i32 {g0}, {gt}`) + let br = emit_bind(`sub i32 255, {b0}`); let bm = emit_bind(`mul i32 {br}, {amt.code}`); let bt = emit_bind(`ashr i32 {bm}, 16`); let b = emit_bind(`add i32 {b0}, {bt}`) + return val(color_pack(r, g, b), "int") +} diff --git a/selfhost/emit_core.ludic b/selfhost/emit_core.ludic index 4e473ee4..07686e12 100644 --- a/selfhost/emit_core.ludic +++ b/selfhost/emit_core.ludic @@ -21,6 +21,9 @@ var nloc: int = 0 var g_uses_str: bool = false # a `str + str` / `str == str` was emitted -> emit the prelude var g_uses_intstr: bool = false # `str(int)` was emitted -> emit the int->string prelude var g_uses_strslice: bool = false # `s[a..b]` was emitted -> emit the substring prelude +var g_uses_mathrt: bool = false # Math.sqrt/sin/cos/tan was emitted -> emit the math runtime prelude +var g_uses_textrt: bool = false # Text.upper/lower/trim/repeat/pad was emitted -> emit the text builders +var g_uses_textrt2: bool = false # Text.split/join/replace was emitted -> emit the string/slice builders # loop targets for break/continue (innermost last) var brk_lbl: []ptr diff --git a/selfhost/emit_decl.ludic b/selfhost/emit_decl.ludic index 0917db11..8186c364 100644 --- a/selfhost/emit_decl.ludic +++ b/selfhost/emit_decl.ludic @@ -99,6 +99,9 @@ fn emit_program() -> void { if g_uses_str { emit_str_prelude() } # @fn_str_eq / @fn_str_concat, after all uses are seen if g_uses_intstr { emit_int_str() } # @fn_int_str, for str(int) in interpolation if g_uses_strslice { emit_str_slice() } # @fn_str_slice, for s[a..b] + if g_uses_mathrt { emit_math_prelude() } # @fn_fx_sqrt / @fn_fx_sin + the sine table + if g_uses_textrt { emit_text_prelude() } # @fn_str_upper/lower/trim/repeat/pad builders + if g_uses_textrt2 { emit_text2_prelude() } # @fn_str_replace/join/split builders } # Flush the emitted IR. With a null path it goes to stdout (the pipe the shell diff --git a/selfhost/emit_ease.ludic b/selfhost/emit_ease.ludic new file mode 100644 index 00000000..9bc5b57e --- /dev/null +++ b/selfhost/emit_ease.ludic @@ -0,0 +1,52 @@ +# emit_ease.ludic — the Ease.* namespace: tween curves over a normalized amount +# t in 0.0..1.0, returning an eased fixed. All pure Q16.16, deterministic. The +# "juice" layer that makes motion feel good (Robert Penner's easings). + +fn is_ease_ns(meth: ptr) -> bool { + if (meth == "in") or (meth == "out") or (meth == "in_out") { return true } + if (meth == "back") or (meth == "bounce") { return true } + return false +} + +# n1 * u * u (u a fixed code) -> code of a fixed i32 +fn ease_bounce_seg(u: ptr) -> ptr { + let uu = fx_mul_code(u, u) + return fx_mul_code(uu, "495616") # 7.5625 * u*u +} + +fn emit_ease_ns(meth: ptr, e: Node) -> Val { + let t = emit_expr(e.kids[0]) + if (meth == "in") { # ease-in quad: t*t + return val(fx_mul_code(t.code, t.code), "fixed") + } + if (meth == "out") { # ease-out quad: t*(2 - t) + let inv = emit_bind(`sub i32 131072, {t.code}`) + return val(fx_mul_code(t.code, inv), "fixed") + } + if (meth == "in_out") { # smooth ease-in-out: 3t^2 - 2t^3 + let t2 = fx_mul_code(t.code, t.code) + let t3 = fx_mul_code(t2, t.code) + let three = emit_bind(`mul i32 {t2}, 3`) + let two = emit_bind(`mul i32 {t3}, 2`) + return val(emit_bind(`sub i32 {three}, {two}`), "fixed") + } + if (meth == "back") { # ease-in-back (overshoots below 0) + let t2 = fx_mul_code(t.code, t.code) + let t3 = fx_mul_code(t2, t.code) + let a = fx_mul_code(t3, "177051") # 2.70158 * t^3 + let b = fx_mul_code(t2, "111515") # 1.70158 * t^2 + return val(emit_bind(`sub i32 {a}, {b}`), "fixed") + } + # ease-out bounce: four parabolic segments, selected by t (all computed, then + # picked branch-free). Shifts/offsets are the standard 2.75-denominator set. + let sA = ease_bounce_seg(t.code) + let uB = emit_bind(`sub i32 {t.code}, 35747`); let sB0 = ease_bounce_seg(uB); let sB = emit_bind(`add i32 {sB0}, 49152`) + let uC = emit_bind(`sub i32 {t.code}, 53620`); let sC0 = ease_bounce_seg(uC); let sC = emit_bind(`add i32 {sC0}, 61440`) + let uD = emit_bind(`sub i32 {t.code}, 62557`); let sD0 = ease_bounce_seg(uD); let sD = emit_bind(`add i32 {sD0}, 64512`) + let cCD = emit_bind(`icmp slt i32 {t.code}, 59578`) + let rCD = emit_bind(`select i1 {cCD}, i32 {sC}, i32 {sD}`) + let cB = emit_bind(`icmp slt i32 {t.code}, 47663`) + let rB = emit_bind(`select i1 {cB}, i32 {sB}, i32 {rCD}`) + let cA = emit_bind(`icmp slt i32 {t.code}, 23831`) + return val(emit_bind(`select i1 {cA}, i32 {sA}, i32 {rB}`), "fixed") +} diff --git a/selfhost/emit_ecs.ludic b/selfhost/emit_ecs.ludic index 6a9878c3..58bb742f 100644 --- a/selfhost/emit_ecs.ludic +++ b/selfhost/emit_ecs.ludic @@ -33,6 +33,7 @@ fn has_ecs() -> bool { return has_systems() or has_models() } fn emit_ecs_storage() -> void { emith("@L_running = internal global i32 1\n") emith("@L_key = internal global i32 0\n") + emith("@L_frame = internal global i32 0\n") if len(g_scenes) > 0 { emith("@L_scene = internal global i32 0\n") } # active base scene id emith("@L_entc = internal global i32 0\n") let me = itoa(MAX_ENT) diff --git a/selfhost/emit_expr.ludic b/selfhost/emit_expr.ludic index 10da4940..ea6af4af 100644 --- a/selfhost/emit_expr.ludic +++ b/selfhost/emit_expr.ludic @@ -160,6 +160,40 @@ fn param_labels(fn: Node) -> []ptr { # after reordering we rewrite the callee to that bare name and fall back into the # ordinary builtin path (which resolves it to its rt_ function). fn emit_ns_call(ns: ptr, meth: ptr, e: Node) -> Val { + # Math.* is computed inline (deterministic fixed-point), not routed through a + # bare rt_ name — so `floor`/`round`/`lerp` never leak into the bare namespace. + if (ns == "Math") { + if is_math_ns(meth) { return emit_math_ns(meth, e) } + perr(`unknown builtin Math.{meth}`) + } + if (ns == "Text") { + if is_text_ns(meth) { return emit_text_ns(meth, e) } + perr(`unknown builtin Text.{meth}`) + } + if (ns == "List") { + if is_list_ns(meth) { return emit_list_ns(meth, e) } + perr(`unknown builtin List.{meth}`) + } + if (ns == "Ease") { + if is_ease_ns(meth) { return emit_ease_ns(meth, e) } + perr(`unknown builtin Ease.{meth}`) + } + if (ns == "Collide") { + if is_collide_ns(meth) { return emit_collide_ns(meth, e) } + perr(`unknown builtin Collide.{meth}`) + } + if (ns == "Mem") { + if is_mem_ns(meth) { return emit_mem_ns(meth, e) } + perr(`unknown builtin Mem.{meth}`) + } + if (ns == "Color") { + if is_colorfn_ns(meth) { return emit_colorfn_ns(meth, e) } + perr(`unknown builtin Color.{meth}`) + } + if (ns == "Time") { + if is_time_ns(meth) { return emit_time_ns(meth, e) } + perr(`unknown builtin Time.{meth}`) + } var bare: ptr = null let labels = new []ptr if (ns == "Screen") { @@ -173,6 +207,13 @@ fn emit_ns_call(ns: ptr, meth: ptr, e: Node) -> Val { if (meth == "width") { bare = "screen_w" } if (meth == "height") { bare = "screen_h" } if (meth == "status") { bare = "status"; push(labels, "text") } + if (meth == "line") { bare = "line"; push(labels, "x1"); push(labels, "y1"); push(labels, "x2"); push(labels, "y2"); push(labels, "color") } + if (meth == "circle") { bare = "circle"; push(labels, "x"); push(labels, "y"); push(labels, "radius"); push(labels, "color") } + if (meth == "fill_circle") { bare = "fill_circle"; push(labels, "x"); push(labels, "y"); push(labels, "radius"); push(labels, "color") } + if (meth == "triangle") { bare = "triangle"; push(labels, "x1"); push(labels, "y1"); push(labels, "x2"); push(labels, "y2"); push(labels, "x3"); push(labels, "y3"); push(labels, "color") } + if (meth == "fill_triangle") { bare = "fill_triangle"; push(labels, "x1"); push(labels, "y1"); push(labels, "x2"); push(labels, "y2"); push(labels, "x3"); push(labels, "y3"); push(labels, "color") } + if (meth == "sprite") { bare = "draw_sprite"; push(labels, "id"); push(labels, "x"); push(labels, "y") } + if (meth == "sprite_scaled") { bare = "draw_sprite_scaled"; push(labels, "id"); push(labels, "x"); push(labels, "y"); push(labels, "scale") } } if (ns == "Map") { if (meth == "size") { bare = "map_size"; push(labels, "width"); push(labels, "height") } @@ -183,10 +224,64 @@ fn emit_ns_call(ns: ptr, meth: ptr, e: Node) -> Val { if (meth == "range") { bare = "rng_range"; push(labels, "low"); push(labels, "high") } if (meth == "chance") { bare = "rng_chance"; push(labels, "percent") } if (meth == "seed") { bare = "seed"; push(labels, "value") } + if (meth == "value") { bare = "rng_value" } + if (meth == "int") { bare = "rng_int"; push(labels, "max") } + if (meth == "sign") { bare = "rng_sign" } } if (ns == "Input") { if (meth == "key") { bare = "key" } } + # Phase 3: the bare reflection / networking / process builtins, namespaced. + # Each is a pure alias — the callee is rewritten to the bare name below. + if (ns == "World") { + if (meth == "get") { bare = "world_get" } + if (meth == "set") { bare = "world_set" } + if (meth == "has") { bare = "world_has" } + if (meth == "count") { bare = "world_count" } + if (meth == "size") { bare = "world_size" } + if (meth == "spawn") { bare = "world_spawn" } + if (meth == "save") { bare = "world_save" } + if (meth == "load") { bare = "world_load" } + if (meth == "prop_id") { bare = "world_prop_id" } + if (meth == "field_id") { bare = "world_field_id" } + if (meth == "model_id") { bare = "world_model_id" } + if (meth == "kind") { bare = "world_kind" } + if (meth == "register_prop") { bare = "world_register_prop" } + if (meth == "attach") { bare = "world_attach_dyn" } + if (meth == "detach") { bare = "world_detach_dyn" } + if (meth == "query_next") { bare = "world_query_next" } + } + if (ns == "Net") { + if (meth == "send") { bare = "net_send" } + if (meth == "poll") { bare = "net_poll" } + if (meth == "serialize") { bare = "serialize" } + if (meth == "apply") { bare = "apply" } + if (meth == "owner") { bare = "owner" } + if (meth == "set_owner") { bare = "set_owner" } + if (meth == "is_server") { bare = "is_server" } + if (meth == "is_owner") { bare = "is_owner" } + if (meth == "local_id") { bare = "local_id" } + } + if (ns == "Sys") { + if (meth == "arg") { bare = "arg" } + if (meth == "arg_count") { bare = "arg_count" } + if (meth == "exit") { bare = "exit" } + if (meth == "run") { bare = "run" } + if (meth == "env") { bare = "getenv" } + if (meth == "read_char") { bare = "read_char" } + if (meth == "file_open") { bare = "file_open" } + if (meth == "file_read") { bare = "file_read" } + if (meth == "file_write") { bare = "file_write" } + if (meth == "file_seek") { bare = "file_seek" } + if (meth == "file_tell") { bare = "file_tell" } + if (meth == "file_close") { bare = "file_close" } + if (meth == "stdout") { bare = "file_stdout" } + if (meth == "stderr") { bare = "file_stderr" } + } + if (ns == "Save") { + if (meth == "write") { bare = "save" } + if (meth == "read") { bare = "load" } + } if (bare == null) { perr(`unknown builtin {ns}.{meth}`) } reorder_named(e, labels) let id = node(E_ID); id.s = bare; e.a = id diff --git a/selfhost/emit_game.ludic b/selfhost/emit_game.ludic index 5145c16e..949bcef7 100644 --- a/selfhost/emit_game.ludic +++ b/selfhost/emit_game.ludic @@ -751,6 +751,9 @@ fn emit_game_main() -> void { emit_calls_for_phase("Update") emit_calls_for_phase("LateUpdate") emit_calls_for_phase("Render") + let fcur = emit_bind("load i32, ptr @L_frame") # Time.frame(): count completed frames + let fnext = emit_bind(`add i32 {fcur}, 1`) + emit(" store i32 "); emit(fnext); emit(", ptr @L_frame\n") emit(" br label %loop\n") emit("done:\n") if len(g_ondespawn) > 0 { emit(" call void @L_despawn_all(i32 2)\n") } # LC1: every survivor's @OnDespawn fires with reason Quit diff --git a/selfhost/emit_head.ludic b/selfhost/emit_head.ludic index 4df2a220..38753e20 100644 --- a/selfhost/emit_head.ludic +++ b/selfhost/emit_head.ludic @@ -52,6 +52,9 @@ fn emit_header() -> void { emith("declare ptr @memcpy(ptr, ptr, i64)\n") emith("declare ptr @memset(ptr, i32, i64)\n") emith("declare i64 @strlen(ptr)\n") + emith("declare i32 @strncmp(ptr, ptr, i64)\n") + emith("declare ptr @strstr(ptr, ptr)\n") + emith("declare i32 @atoi(ptr)\n") emith("declare i32 @getchar()\n") emith("declare i32 @putchar(i32)\n") emith("declare i64 @time(ptr)\n") diff --git a/selfhost/emit_list.ludic b/selfhost/emit_list.ludic new file mode 100644 index 00000000..006f29a6 --- /dev/null +++ b/selfhost/emit_list.ludic @@ -0,0 +1,294 @@ +# emit_list.ludic — the List.* namespace over []T slices. A slice is the +# { data, len, cap } %LSlice header (see emit_new.ludic); every op here reads or +# mutates that header in place, so all holders of the slice observe the change. +# Element comparison (contains/index_of) is by value for scalars and by identity +# for reference elements (structs/strings), matching how `==` behaves elsewhere. + +# address of element `idx` (an i32 code) in slice header `h`, element LLVM type `elt` +fn list_elem_addr(h: ptr, elt: ptr, idx: ptr) -> ptr { + let dp = slice_field(h, 0) + let data = emit_bind(`load ptr, ptr {dp}`) + return emit_bind(`getelementptr inbounds {elt}, ptr {data}, i32 {idx}`) +} + +fn is_list_ns(meth: ptr) -> bool { + if (meth == "len") or (meth == "push") or (meth == "clear") { return true } + if (meth == "first") or (meth == "last") or (meth == "pop") or (meth == "swap") { return true } + if (meth == "contains") or (meth == "index_of") or (meth == "reverse") { return true } + if (meth == "insert") or (meth == "remove_at") or (meth == "remove") or (meth == "sort") { return true } + return false +} + +# grow the slice's backing buffer if it is full, exactly as push does (double, +# or 8 from empty). Leaves length untouched; only capacity/data may change. +fn list_grow_if_full(h: ptr, elt: ptr) -> void { + let lp = slice_field(h, 1); let cp = slice_field(h, 2); let dp = slice_field(h, 0) + 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("ig"); let done = lbl("igd") + emit(" br i1 "); emit(full); emit(", label %"); emit(grow); emit(", label %"); emit(done); emit("\n") + emit(grow); emit(":\n") + 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(`zext i32 {nc} to i64`) + let byts = emit_bind(`mul i64 {ncw}, {esz}`) + let old = emit_bind(`load ptr, ptr {dp}`) + let nd = emit_bind(`call ptr @realloc(ptr {old}, i64 {byts})`) + 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(done); emit("\n") + emit(done); emit(":\n") +} + +fn emit_list_ns(meth: ptr, e: Node) -> Val { + if (meth == "len") { return emit_len(e) } # same header length as len(s) + if (meth == "push") { return emit_push(e) } # same as push(s, v) + let s = emit_expr(e.kids[0]) + if not is_slice_ty(s.ty) { perr(`List.{meth} needs a slice`) } + let el = slice_elem(s.ty) + let elt = llty(el) + let h = s.code + let lp = slice_field(h, 1) + + if (meth == "clear") { # drop to length 0 (keeps capacity) + emit(" store i32 0, ptr "); emit(lp); emit("\n") + return val("0", "void") + } + if (meth == "first") { # element 0 (assumes non-empty) + let a = list_elem_addr(h, elt, "0") + return val(emit_bind(`load {elt}, ptr {a}`), el) + } + if (meth == "last") { # element len-1 (assumes non-empty) + let l = emit_bind(`load i32, ptr {lp}`) + let l1 = emit_bind(`sub i32 {l}, 1`) + let a = list_elem_addr(h, elt, l1) + return val(emit_bind(`load {elt}, ptr {a}`), el) + } + if (meth == "pop") { # remove & return the last element + let l = emit_bind(`load i32, ptr {lp}`) + let l1 = emit_bind(`sub i32 {l}, 1`) + let a = list_elem_addr(h, elt, l1) + let v = emit_bind(`load {elt}, ptr {a}`) + emit(" store i32 "); emit(l1); emit(", ptr "); emit(lp); emit("\n") + return val(v, el) + } + if (meth == "swap") { # exchange elements i and j + let i = emit_expr(e.kids[1]); let j = emit_expr(e.kids[2]) + let ai = list_elem_addr(h, elt, i.code) + let aj = list_elem_addr(h, elt, j.code) + let vi = emit_bind(`load {elt}, ptr {ai}`) + let vj = emit_bind(`load {elt}, ptr {aj}`) + emit(" store "); emit(elt); emit(" "); emit(vj); emit(", ptr "); emit(ai); emit("\n") + emit(" store "); emit(elt); emit(" "); emit(vi); emit(", ptr "); emit(aj); emit("\n") + return val("0", "void") + } + if (meth == "contains") or (meth == "index_of") { # linear scan; index_of -> -1 if absent + let needle = emit_expr(e.kids[1]) + let l = emit_bind(`load i32, ptr {lp}`) + let res = emit_alloca("i32") + store_at("i32", "-1", res) + let ix = emit_alloca("i32") + store_at("i32", "0", ix) + let cl = lbl("lc_cond"); let bl = lbl("lc_body"); let hit = lbl("lc_hit") + let nx = lbl("lc_next"); let en = lbl("lc_end") + emit(" br label %"); emit(cl); emit("\n") + emit(cl); emit(":\n") + let iv = emit_bind(`load i32, ptr {ix}`) + let more = emit_bind(`icmp slt i32 {iv}, {l}`) + emit(" br i1 "); emit(more); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") + emit(bl); emit(":\n") + let a = list_elem_addr(h, elt, iv) + let ev = emit_bind(`load {elt}, ptr {a}`) + let eq = emit_bind(`icmp eq {elt} {ev}, {needle.code}`) + emit(" br i1 "); emit(eq); emit(", label %"); emit(hit); emit(", label %"); emit(nx); emit("\n") + emit(hit); emit(":\n") + store_at("i32", iv, res) + emit(" br label %"); emit(en); emit("\n") + emit(nx); emit(":\n") + let iv1 = emit_bind(`add i32 {iv}, 1`) + store_at("i32", iv1, ix) + emit(" br label %"); emit(cl); emit("\n") + emit(en); emit(":\n") + let found = emit_bind(`load i32, ptr {res}`) + if (meth == "index_of") { return val(found, "int") } + let hasit = emit_bind(`icmp sge i32 {found}, 0`) # contains -> found >= 0 + return val(emit_bind(`zext i1 {hasit} to i32`), "bool") + } + if (meth == "insert") { # insert v at index i, shifting the rest up + let idx = emit_expr(e.kids[1]); let vv = emit_expr(e.kids[2]) + list_grow_if_full(h, elt) + let l = emit_bind(`load i32, ptr {lp}`) + let jp = emit_alloca("i32") + store_at("i32", l, jp) + let cl = lbl("li_c"); let bl = lbl("li_b"); let en = lbl("li_e") + emit(" br label %"); emit(cl); emit("\n"); emit(cl); emit(":\n") + let j = emit_bind(`load i32, ptr {jp}`) + let go = emit_bind(`icmp sgt i32 {j}, {idx.code}`) + emit(" br i1 "); emit(go); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") + emit(bl); emit(":\n") + let jm1 = emit_bind(`sub i32 {j}, 1`) + let src = list_elem_addr(h, elt, jm1) + let sv = emit_bind(`load {elt}, ptr {src}`) + let dst = list_elem_addr(h, elt, j) + emit(" store "); emit(elt); emit(" "); emit(sv); emit(", ptr "); emit(dst); emit("\n") + store_at("i32", jm1, jp) + emit(" br label %"); emit(cl); emit("\n") + emit(en); emit(":\n") + let at = list_elem_addr(h, elt, idx.code) + emit(" store "); emit(elt); emit(" "); emit(vv.code); emit(", ptr "); emit(at); emit("\n") + let l1 = emit_bind(`add i32 {l}, 1`) + emit(" store i32 "); emit(l1); emit(", ptr "); emit(lp); emit("\n") + return val("0", "void") + } + if (meth == "remove_at") { # remove index i, shifting the rest down + let idx = emit_expr(e.kids[1]) + let l = emit_bind(`load i32, ptr {lp}`) + let lm1 = emit_bind(`sub i32 {l}, 1`) + let jp = emit_alloca("i32") + store_at("i32", idx.code, jp) + let cl = lbl("lr_c"); let bl = lbl("lr_b"); let en = lbl("lr_e") + emit(" br label %"); emit(cl); emit("\n"); emit(cl); emit(":\n") + let j = emit_bind(`load i32, ptr {jp}`) + let go = emit_bind(`icmp slt i32 {j}, {lm1}`) + emit(" br i1 "); emit(go); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") + emit(bl); emit(":\n") + let jp1 = emit_bind(`add i32 {j}, 1`) + let src = list_elem_addr(h, elt, jp1) + let sv = emit_bind(`load {elt}, ptr {src}`) + let dst = list_elem_addr(h, elt, j) + emit(" store "); emit(elt); emit(" "); emit(sv); emit(", ptr "); emit(dst); emit("\n") + store_at("i32", jp1, jp) + emit(" br label %"); emit(cl); emit("\n") + emit(en); emit(":\n") + emit(" store i32 "); emit(lm1); emit(", ptr "); emit(lp); emit("\n") + return val("0", "void") + } + if (meth == "remove") { # remove the first element equal to v + let needle = emit_expr(e.kids[1]) + let l = emit_bind(`load i32, ptr {lp}`) + # scan for the index of v (-1 if absent) + let fp = emit_alloca("i32") + store_at("i32", "-1", fp) + let ip = emit_alloca("i32") + store_at("i32", "0", ip) + let sc = lbl("lv_c"); let sb = lbl("lv_b"); let sh = lbl("lv_h"); let sn = lbl("lv_n"); let se = lbl("lv_e") + emit(" br label %"); emit(sc); emit("\n"); emit(sc); emit(":\n") + let iv = emit_bind(`load i32, ptr {ip}`) + let more = emit_bind(`icmp slt i32 {iv}, {l}`) + let seen = emit_bind(`load i32, ptr {fp}`) + let notyet = emit_bind(`icmp slt i32 {seen}, 0`) + let cont = emit_bind(`and i1 {more}, {notyet}`) + emit(" br i1 "); emit(cont); emit(", label %"); emit(sb); emit(", label %"); emit(se); emit("\n") + emit(sb); emit(":\n") + let a = list_elem_addr(h, elt, iv) + let ev = emit_bind(`load {elt}, ptr {a}`) + let eq = emit_bind(`icmp eq {elt} {ev}, {needle.code}`) + emit(" br i1 "); emit(eq); emit(", label %"); emit(sh); emit(", label %"); emit(sn); emit("\n") + emit(sh); emit(":\n"); store_at("i32", iv, fp); emit(" br label %"); emit(sc); emit("\n") + emit(sn); emit(":\n") + let iv1 = emit_bind(`add i32 {iv}, 1`) + store_at("i32", iv1, ip) + emit(" br label %"); emit(sc); emit("\n") + emit(se); emit(":\n") + # if found, shift the tail down and shrink + let found = emit_bind(`load i32, ptr {fp}`) + let has = emit_bind(`icmp sge i32 {found}, 0`) + let doit = lbl("lv_do"); let end = lbl("lv_end") + emit(" br i1 "); emit(has); emit(", label %"); emit(doit); emit(", label %"); emit(end); emit("\n") + emit(doit); emit(":\n") + let lm1 = emit_bind(`sub i32 {l}, 1`) + let jp = emit_alloca("i32") + store_at("i32", found, jp) + let dc = lbl("lv_dc"); let db = lbl("lv_db"); let de = lbl("lv_de") + emit(" br label %"); emit(dc); emit("\n"); emit(dc); emit(":\n") + let j = emit_bind(`load i32, ptr {jp}`) + let go = emit_bind(`icmp slt i32 {j}, {lm1}`) + emit(" br i1 "); emit(go); emit(", label %"); emit(db); emit(", label %"); emit(de); emit("\n") + emit(db); emit(":\n") + let jp1 = emit_bind(`add i32 {j}, 1`) + let src = list_elem_addr(h, elt, jp1) + let sv = emit_bind(`load {elt}, ptr {src}`) + let dst = list_elem_addr(h, elt, j) + emit(" store "); emit(elt); emit(" "); emit(sv); emit(", ptr "); emit(dst); emit("\n") + store_at("i32", jp1, jp) + emit(" br label %"); emit(dc); emit("\n") + emit(de); emit(":\n") + emit(" store i32 "); emit(lm1); emit(", ptr "); emit(lp); emit("\n") + emit(" br label %"); emit(end); emit("\n") + emit(end); emit(":\n") + return val("0", "void") + } + if (meth == "sort") { # ascending insertion sort, in place + let l = emit_bind(`load i32, ptr {lp}`) + let ip = emit_alloca("i32") + store_at("i32", "1", ip) + let oc = lbl("ls_oc"); let ob = lbl("ls_ob"); let oe = lbl("ls_oe") + emit(" br label %"); emit(oc); emit("\n"); emit(oc); emit(":\n") + let i = emit_bind(`load i32, ptr {ip}`) + let omore = emit_bind(`icmp slt i32 {i}, {l}`) + emit(" br i1 "); emit(omore); emit(", label %"); emit(ob); emit(", label %"); emit(oe); emit("\n") + emit(ob); emit(":\n") + let ai = list_elem_addr(h, elt, i) + let key = emit_bind(`load {elt}, ptr {ai}`) + let jp = emit_alloca("i32") + let im1 = emit_bind(`sub i32 {i}, 1`) + store_at("i32", im1, jp) + let ic = lbl("ls_ic"); let ib = lbl("ls_ib"); let ie = lbl("ls_ie") + emit(" br label %"); emit(ic); emit("\n"); emit(ic); emit(":\n") + let j = emit_bind(`load i32, ptr {jp}`) + let jok = emit_bind(`icmp sge i32 {j}, 0`) + let aj = list_elem_addr(h, elt, j) + let ev = emit_bind(`load {elt}, ptr {aj}`) + let gt = emit_bind(`icmp sgt {elt} {ev}, {key}`) + let shift = emit_bind(`and i1 {jok}, {gt}`) + emit(" br i1 "); emit(shift); emit(", label %"); emit(ib); emit(", label %"); emit(ie); emit("\n") + emit(ib); emit(":\n") + let jp1 = emit_bind(`add i32 {j}, 1`) + let dst = list_elem_addr(h, elt, jp1) + emit(" store "); emit(elt); emit(" "); emit(ev); emit(", ptr "); emit(dst); emit("\n") + let jm1 = emit_bind(`sub i32 {j}, 1`) + store_at("i32", jm1, jp) + emit(" br label %"); emit(ic); emit("\n") + emit(ie); emit(":\n") + let j2 = emit_bind(`load i32, ptr {jp}`) + let slot = emit_bind(`add i32 {j2}, 1`) + let sa = list_elem_addr(h, elt, slot) + emit(" store "); emit(elt); emit(" "); emit(key); emit(", ptr "); emit(sa); emit("\n") + let i1 = emit_bind(`add i32 {i}, 1`) + store_at("i32", i1, ip) + emit(" br label %"); emit(oc); emit("\n") + emit(oe); emit(":\n") + return val("0", "void") + } + # reverse: swap ends inward until the cursors meet + let l = emit_bind(`load i32, ptr {lp}`) + let loi = emit_alloca("i32") + store_at("i32", "0", loi) + let hii = emit_alloca("i32") + let lm1 = emit_bind(`sub i32 {l}, 1`) + store_at("i32", lm1, hii) + let cl = lbl("lr_cond"); let bl = lbl("lr_body"); let en = lbl("lr_end") + emit(" br label %"); emit(cl); emit("\n") + emit(cl); emit(":\n") + let lo = emit_bind(`load i32, ptr {loi}`) + let hi = emit_bind(`load i32, ptr {hii}`) + let go = emit_bind(`icmp slt i32 {lo}, {hi}`) + emit(" br i1 "); emit(go); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") + emit(bl); emit(":\n") + let alo = list_elem_addr(h, elt, lo) + let ahi = list_elem_addr(h, elt, hi) + let vlo = emit_bind(`load {elt}, ptr {alo}`) + let vhi = emit_bind(`load {elt}, ptr {ahi}`) + emit(" store "); emit(elt); emit(" "); emit(vhi); emit(", ptr "); emit(alo); emit("\n") + emit(" store "); emit(elt); emit(" "); emit(vlo); emit(", ptr "); emit(ahi); emit("\n") + let lo1 = emit_bind(`add i32 {lo}, 1`) + store_at("i32", lo1, loi) + let hi1 = emit_bind(`sub i32 {hi}, 1`) + store_at("i32", hi1, hii) + emit(" br label %"); emit(cl); emit("\n") + emit(en); emit(":\n") + return val("0", "void") +} diff --git a/selfhost/emit_math.ludic b/selfhost/emit_math.ludic index ccf8a395..49193da8 100644 --- a/selfhost/emit_math.ludic +++ b/selfhost/emit_math.ludic @@ -1,6 +1,9 @@ -# emit_math.ludic — the math builtins that lower to inline IR rather than a -# runtime call: min, max, abs, clamp. Everything else named like a builtin -# (clear, fill_rect, reg, ...) is resolved to its rt_ function by emit_call. +# emit_math.ludic — the Math.* namespace, all deterministic Q16.16 fixed-point. +# min/max/abs/clamp lower to inline IR (and stay bare too); sign/floor/ceil/ +# round/lerp/inverse_lerp/remap and the geometry/interp helpers are inline; and +# sqrt/sin/cos/tan call the runtime prelude below (@fn_fx_sqrt is a bit-by-bit +# integer root, @fn_fx_sin a 256-entry interpolated sine table). Everything is +# plain integer IR, so it is bit-identical on every platform. fn is_math_builtin(name: ptr) -> bool { return (name == "min") or (name == "max") or (name == "abs") or (name == "clamp") @@ -11,19 +14,331 @@ fn emit_math_builtin(name: ptr, e: Node) -> Val { let a = emit_expr(e.kids[0]) 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") + return val(emit_bind(`select i1 {c}, i32 {n}, i32 {a.code}`), a.ty) } if (name == "min") or (name == "max") { let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]) var op = "slt" 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") + return val(emit_bind(`select i1 {c}, i32 {a.code}, i32 {b.code}`), a.ty) } # 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(`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") + return val(emit_bind(`select i1 {c2}, i32 {lo.code}, i32 {t}`), v.ty) +} + +# a * b in Q16.16 (64-bit intermediate, arithmetic shift back) -> code of an i32 +fn fx_mul_code(a: ptr, b: ptr) -> ptr { + let a64 = emit_bind(`sext i32 {a} to i64`) + let b64 = emit_bind(`sext i32 {b} to i64`) + let m = emit_bind(`mul i64 {a64}, {b64}`) + let sh = emit_bind(`ashr i64 {m}, 16`) + return emit_bind(`trunc i64 {sh} to i32`) +} + +# a / b in Q16.16 (shift the numerator up before the divide) -> code of an i32 +fn fx_div_code(a: ptr, b: ptr) -> ptr { + let a64 = emit_bind(`sext i32 {a} to i64`) + let ash = emit_bind(`shl i64 {a64}, 16`) + let b64 = emit_bind(`sext i32 {b} to i64`) + let dv = emit_bind(`sdiv i64 {ash}, {b64}`) + return emit_bind(`trunc i64 {dv} to i32`) +} + +# lerp(a, b, t) = a + (b - a) * t, all Q16.16 -> code of a fixed i32 +fn fx_lerp_code(a: ptr, b: ptr, t: ptr) -> ptr { + let d = emit_bind(`sub i32 {b}, {a}`) + let dt = fx_mul_code(d, t) + return emit_bind(`add i32 {a}, {dt}`) +} + +# inverse_lerp(a, b, v) = (v - a) / (b - a), all Q16.16 -> code of a fixed i32 +fn fx_inv_lerp_code(a: ptr, b: ptr, v: ptr) -> ptr { + let num = emit_bind(`sub i32 {v}, {a}`) + let den = emit_bind(`sub i32 {b}, {a}`) + return fx_div_code(num, den) +} + +# Math.* — the namespaced surface. min/max/abs/clamp reuse the bare lowering; +# the rest are new deterministic fixed-point helpers. Returns g_intrin-style via +# a direct Val; callers guard with is_math_ns first. +fn is_math_ns(meth: ptr) -> bool { + if (meth == "min") or (meth == "max") or (meth == "abs") or (meth == "clamp") { return true } + if (meth == "sign") or (meth == "floor") or (meth == "ceil") or (meth == "round") { return true } + if (meth == "lerp") or (meth == "inverse_lerp") or (meth == "remap") { return true } + if (meth == "sqrt") or (meth == "sin") or (meth == "cos") or (meth == "tan") or (meth == "hypot") { return true } + if (meth == "atan2") or (meth == "asin") or (meth == "acos") { return true } + if (meth == "deg_to_rad") or (meth == "rad_to_deg") or (meth == "posmod") or (meth == "wrap") { return true } + if (meth == "ping_pong") or (meth == "snapped") or (meth == "move_toward") or (meth == "smoothstep") { return true } + if (meth == "dist") or (meth == "dist2") { return true } + return false +} + +fn emit_math_ns(meth: ptr, e: Node) -> Val { + if (meth == "min") or (meth == "max") or (meth == "abs") or (meth == "clamp") { + return emit_math_builtin(meth, e) + } + if (meth == "sign") { # sign(x) -> -1 / 0 / 1 (int) + let a = emit_expr(e.kids[0]) + let pos = emit_bind(`icmp sgt i32 {a.code}, 0`) + let neg = emit_bind(`icmp slt i32 {a.code}, 0`) + let lo = emit_bind(`select i1 {neg}, i32 -1, i32 0`) + return val(emit_bind(`select i1 {pos}, i32 1, i32 {lo}`), "int") + } + if (meth == "floor") { # floor(fixed) -> int + let a = emit_expr(e.kids[0]) + return val(emit_bind(`ashr i32 {a.code}, 16`), "int") + } + if (meth == "ceil") { # ceil(fixed) -> int + let a = emit_expr(e.kids[0]) + let t = emit_bind(`add i32 {a.code}, 65535`) + return val(emit_bind(`ashr i32 {t}, 16`), "int") + } + if (meth == "round") { # round(fixed) -> nearest int (half up) + let a = emit_expr(e.kids[0]) + let t = emit_bind(`add i32 {a.code}, 32768`) + return val(emit_bind(`ashr i32 {t}, 16`), "int") + } + if (meth == "lerp") { # lerp(a, b, t: fixed) -> fixed + let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]); let t = emit_expr(e.kids[2]) + return val(fx_lerp_code(a.code, b.code, t.code), "fixed") + } + if (meth == "inverse_lerp") { # inverse_lerp(a, b, v: fixed) -> fixed + let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]); let v = emit_expr(e.kids[2]) + return val(fx_inv_lerp_code(a.code, b.code, v.code), "fixed") + } + if (meth == "sqrt") { # sqrt(fixed) -> fixed (deterministic isqrt) + g_uses_mathrt = true + let a = emit_expr(e.kids[0]) + return val(emit_bind(`call i32 @fn_fx_sqrt(i32 {a.code})`), "fixed") + } + if (meth == "sin") { # sin(radians: fixed) -> fixed + g_uses_mathrt = true + let a = emit_expr(e.kids[0]) + return val(emit_bind(`call i32 @fn_fx_sin(i32 {a.code})`), "fixed") + } + if (meth == "cos") { # cos(x) = sin(x + pi/2), pi/2 = 102944 fixed + g_uses_mathrt = true + let a = emit_expr(e.kids[0]) + let sh = emit_bind(`add i32 {a.code}, 102944`) + return val(emit_bind(`call i32 @fn_fx_sin(i32 {sh})`), "fixed") + } + if (meth == "tan") { # tan(x) = sin(x) / cos(x) + g_uses_mathrt = true + let a = emit_expr(e.kids[0]) + let s = emit_bind(`call i32 @fn_fx_sin(i32 {a.code})`) + let sh = emit_bind(`add i32 {a.code}, 102944`) + let c = emit_bind(`call i32 @fn_fx_sin(i32 {sh})`) + return val(fx_div_code(s, c), "fixed") + } + if (meth == "atan2") { # atan2(y, x) -> angle in radians + g_uses_mathrt = true + let y = emit_expr(e.kids[0]); let x = emit_expr(e.kids[1]) + return val(emit_bind(`call i32 @fn_fx_atan2(i32 {y.code}, i32 {x.code})`), "fixed") + } + if (meth == "asin") { # asin(x) = atan2(x, sqrt(1 - x^2)) + g_uses_mathrt = true + let x = emit_expr(e.kids[0]) + let xx = fx_mul_code(x.code, x.code) + let om = emit_bind(`sub i32 65536, {xx}`) + let root = emit_bind(`call i32 @fn_fx_sqrt(i32 {om})`) + return val(emit_bind(`call i32 @fn_fx_atan2(i32 {x.code}, i32 {root})`), "fixed") + } + if (meth == "acos") { # acos(x) = atan2(sqrt(1 - x^2), x) + g_uses_mathrt = true + let x = emit_expr(e.kids[0]) + let xx = fx_mul_code(x.code, x.code) + let om = emit_bind(`sub i32 65536, {xx}`) + let root = emit_bind(`call i32 @fn_fx_sqrt(i32 {om})`) + return val(emit_bind(`call i32 @fn_fx_atan2(i32 {root}, i32 {x.code})`), "fixed") + } + if (meth == "hypot") { # hypot(x, y) = sqrt(x*x + y*y) + g_uses_mathrt = true + let x = emit_expr(e.kids[0]); let y = emit_expr(e.kids[1]) + let xx = fx_mul_code(x.code, x.code); let yy = fx_mul_code(y.code, y.code) + let s = emit_bind(`add i32 {xx}, {yy}`) + return val(emit_bind(`call i32 @fn_fx_sqrt(i32 {s})`), "fixed") + } + if (meth == "dist2") { # dist2(x0,y0,x1,y1) = dx*dx + dy*dy + let x0 = emit_expr(e.kids[0]); let y0 = emit_expr(e.kids[1]) + let x1 = emit_expr(e.kids[2]); let y1 = emit_expr(e.kids[3]) + let dx = emit_bind(`sub i32 {x1.code}, {x0.code}`) + let dy = emit_bind(`sub i32 {y1.code}, {y0.code}`) + let xx = fx_mul_code(dx, dx); let yy = fx_mul_code(dy, dy) + return val(emit_bind(`add i32 {xx}, {yy}`), "fixed") + } + if (meth == "dist") { # dist(x0,y0,x1,y1) = sqrt(dist2) + g_uses_mathrt = true + let x0 = emit_expr(e.kids[0]); let y0 = emit_expr(e.kids[1]) + let x1 = emit_expr(e.kids[2]); let y1 = emit_expr(e.kids[3]) + let dx = emit_bind(`sub i32 {x1.code}, {x0.code}`) + let dy = emit_bind(`sub i32 {y1.code}, {y0.code}`) + let xx = fx_mul_code(dx, dx); let yy = fx_mul_code(dy, dy) + let s = emit_bind(`add i32 {xx}, {yy}`) + return val(emit_bind(`call i32 @fn_fx_sqrt(i32 {s})`), "fixed") + } + if (meth == "deg_to_rad") { # d * (pi/180), pi/180 = 1144 fixed + let d = emit_expr(e.kids[0]) + return val(fx_mul_code(d.code, "1144"), "fixed") + } + if (meth == "rad_to_deg") { # r * (180/pi), 180/pi = 3754936 fixed + let r = emit_expr(e.kids[0]) + return val(fx_mul_code(r.code, "3754936"), "fixed") + } + if (meth == "posmod") { # ((a % m) + m) % m, always in [0, m) + let a = emit_expr(e.kids[0]); let m = emit_expr(e.kids[1]) + let r = emit_bind(`srem i32 {a.code}, {m.code}`) + let rm = emit_bind(`add i32 {r}, {m.code}`) + return val(emit_bind(`srem i32 {rm}, {m.code}`), "int") + } + if (meth == "wrap") { # wrap(v, lo, hi) into [lo, hi) + let v = emit_expr(e.kids[0]); let lo = emit_expr(e.kids[1]); let hi = emit_expr(e.kids[2]) + let range = emit_bind(`sub i32 {hi.code}, {lo.code}`) + let off = emit_bind(`sub i32 {v.code}, {lo.code}`) + let r = emit_bind(`srem i32 {off}, {range}`) + let rm = emit_bind(`add i32 {r}, {range}`) + let pm = emit_bind(`srem i32 {rm}, {range}`) + return val(emit_bind(`add i32 {lo.code}, {pm}`), "int") + } + if (meth == "ping_pong") { # bounce 0..len..0, integer + let t = emit_expr(e.kids[0]); let l = emit_expr(e.kids[1]) + let two = emit_bind(`mul i32 {l.code}, 2`) + let r = emit_bind(`srem i32 {t.code}, {two}`) + let rm = emit_bind(`add i32 {r}, {two}`) + let pm = emit_bind(`srem i32 {rm}, {two}`) + let sub = emit_bind(`sub i32 {pm}, {l.code}`) + let neg = emit_bind(`sub i32 0, {sub}`) + let c = emit_bind(`icmp slt i32 {sub}, 0`) + let ab = emit_bind(`select i1 {c}, i32 {neg}, i32 {sub}`) + return val(emit_bind(`sub i32 {l.code}, {ab}`), "int") + } + if (meth == "snapped") { # nearest multiple of step (fixed) + let v = emit_expr(e.kids[0]); let step = emit_expr(e.kids[1]) + let q = fx_div_code(v.code, step.code) + let qr = emit_bind(`add i32 {q}, 32768`) + let n = emit_bind(`ashr i32 {qr}, 16`) + return val(emit_bind(`mul i32 {n}, {step.code}`), "fixed") + } + if (meth == "move_toward") { # step from -> to by at most delta (fixed) + let f = emit_expr(e.kids[0]); let to = emit_expr(e.kids[1]); let d = emit_expr(e.kids[2]) + let diff = emit_bind(`sub i32 {to.code}, {f.code}`) + let dneg = emit_bind(`sub i32 0, {diff}`) + let dc = emit_bind(`icmp slt i32 {diff}, 0`) + let adiff = emit_bind(`select i1 {dc}, i32 {dneg}, i32 {diff}`) + let pos = emit_bind(`icmp sgt i32 {diff}, 0`) + let neg = emit_bind(`icmp slt i32 {diff}, 0`) + let slo = emit_bind(`select i1 {neg}, i32 -1, i32 0`) + let sgn = emit_bind(`select i1 {pos}, i32 1, i32 {slo}`) + let stepv = emit_bind(`mul i32 {sgn}, {d.code}`) + let moved = emit_bind(`add i32 {f.code}, {stepv}`) + let reach = emit_bind(`icmp sle i32 {adiff}, {d.code}`) + return val(emit_bind(`select i1 {reach}, i32 {to.code}, i32 {moved}`), "fixed") + } + if (meth == "smoothstep") { # smooth 0..1 ramp between e0 and e1 + let e0 = emit_expr(e.kids[0]); let e1 = emit_expr(e.kids[1]); let x = emit_expr(e.kids[2]) + let tt = fx_inv_lerp_code(e0.code, e1.code, x.code) + let c1 = emit_bind(`icmp slt i32 {tt}, 0`) + let t0 = emit_bind(`select i1 {c1}, i32 0, i32 {tt}`) + let c2 = emit_bind(`icmp sgt i32 {t0}, 65536`) + let t = emit_bind(`select i1 {c2}, i32 65536, i32 {t0}`) + let twot = emit_bind(`mul i32 {t}, 2`) + let poly = emit_bind(`sub i32 196608, {twot}`) + let tsq = fx_mul_code(t, t) + return val(fx_mul_code(tsq, poly), "fixed") + } + # remap(v, in0, in1, out0, out1) = lerp(out0, out1, inverse_lerp(in0, in1, v)) + let v = emit_expr(e.kids[0]) + let i0 = emit_expr(e.kids[1]); let i1 = emit_expr(e.kids[2]) + let o0 = emit_expr(e.kids[3]); let o1 = emit_expr(e.kids[4]) + let t = fx_inv_lerp_code(i0.code, i1.code, v.code) + return val(fx_lerp_code(o0.code, o1.code, t), "fixed") +} + +# emit_math_prelude — the deterministic fixed-point math runtime, emitted once +# per program that uses Math.sqrt/sin/cos/tan. @fn_fx_sqrt is a 64-bit integer +# square root (bit-by-bit); @fn_fx_sin reads a 256-entry Q16.16 sine table with +# linear interpolation. Both are pure integer IR, so bit-identical everywhere. +fn emit_math_prelude() -> void { + emith("@L_sin_tab = private unnamed_addr constant [256 x i32] [i32 0, i32 1608, i32 3216, i32 4821, i32 6424, i32 8022, i32 9616, i32 11204, i32 12785, i32 14359, i32 15924, i32 17479, i32 19024, i32 20557, i32 22078, i32 23586, i32 25080, i32 26558, i32 28020, i32 29466, i32 30893, i32 32303, i32 33692, i32 35062, i32 36410, i32 37736, i32 39040, i32 40320, i32 41576, i32 42806, i32 44011, i32 45190, i32 46341, i32 47464, i32 48559, i32 49624, i32 50660, i32 51665, i32 52639, i32 53581, i32 54491, i32 55368, i32 56212, i32 57022, i32 57798, i32 58538, i32 59244, i32 59914, i32 60547, i32 61145, i32 61705, i32 62228, i32 62714, i32 63162, i32 63572, i32 63944, i32 64277, i32 64571, i32 64827, i32 65043, i32 65220, i32 65358, i32 65457, i32 65516, i32 65536, i32 65516, i32 65457, i32 65358, i32 65220, i32 65043, i32 64827, i32 64571, i32 64277, i32 63944, i32 63572, i32 63162, i32 62714, i32 62228, i32 61705, i32 61145, i32 60547, i32 59914, i32 59244, i32 58538, i32 57798, i32 57022, i32 56212, i32 55368, i32 54491, i32 53581, i32 52639, i32 51665, i32 50660, i32 49624, i32 48559, i32 47464, i32 46341, i32 45190, i32 44011, i32 42806, i32 41576, i32 40320, i32 39040, i32 37736, i32 36410, i32 35062, i32 33692, i32 32303, i32 30893, i32 29466, i32 28020, i32 26558, i32 25080, i32 23586, i32 22078, i32 20557, i32 19024, i32 17479, i32 15924, i32 14359, i32 12785, i32 11204, i32 9616, i32 8022, i32 6424, i32 4821, i32 3216, i32 1608, i32 0, i32 -1608, i32 -3216, i32 -4821, i32 -6424, i32 -8022, i32 -9616, i32 -11204, i32 -12785, i32 -14359, i32 -15924, i32 -17479, i32 -19024, i32 -20557, i32 -22078, i32 -23586, i32 -25080, i32 -26558, i32 -28020, i32 -29466, i32 -30893, i32 -32303, i32 -33692, i32 -35062, i32 -36410, i32 -37736, i32 -39040, i32 -40320, i32 -41576, i32 -42806, i32 -44011, i32 -45190, i32 -46341, i32 -47464, i32 -48559, i32 -49624, i32 -50660, i32 -51665, i32 -52639, i32 -53581, i32 -54491, i32 -55368, i32 -56212, i32 -57022, i32 -57798, i32 -58538, i32 -59244, i32 -59914, i32 -60547, i32 -61145, i32 -61705, i32 -62228, i32 -62714, i32 -63162, i32 -63572, i32 -63944, i32 -64277, i32 -64571, i32 -64827, i32 -65043, i32 -65220, i32 -65358, i32 -65457, i32 -65516, i32 -65536, i32 -65516, i32 -65457, i32 -65358, i32 -65220, i32 -65043, i32 -64827, i32 -64571, i32 -64277, i32 -63944, i32 -63572, i32 -63162, i32 -62714, i32 -62228, i32 -61705, i32 -61145, i32 -60547, i32 -59914, i32 -59244, i32 -58538, i32 -57798, i32 -57022, i32 -56212, i32 -55368, i32 -54491, i32 -53581, i32 -52639, i32 -51665, i32 -50660, i32 -49624, i32 -48559, i32 -47464, i32 -46341, i32 -45190, i32 -44011, i32 -42806, i32 -41576, i32 -40320, i32 -39040, i32 -37736, i32 -36410, i32 -35062, i32 -33692, i32 -32303, i32 -30893, i32 -29466, i32 -28020, i32 -26558, i32 -25080, i32 -23586, i32 -22078, i32 -20557, i32 -19024, i32 -17479, i32 -15924, i32 -14359, i32 -12785, i32 -11204, i32 -9616, i32 -8022, i32 -6424, i32 -4821, i32 -3216, i32 -1608]\n") + emith("define i32 @fn_fx_sqrt(i32 %x) {\n") + emith("entry:\n %neg = icmp slt i32 %x, 0\n br i1 %neg, label %ret0, label %go\n") + emith("ret0:\n ret i32 0\n") + emith("go:\n %x64 = sext i32 %x to i64\n %n0 = shl i64 %x64, 16\n") + emith(" %np = alloca i64\n %rp = alloca i64\n %bp = alloca i64\n") + emith(" store i64 %n0, ptr %np\n store i64 0, ptr %rp\n store i64 4611686018427387904, ptr %bp\n br label %adj\n") + emith("adj:\n %b1 = load i64, ptr %bp\n %n1 = load i64, ptr %np\n %tb = icmp ugt i64 %b1, %n1\n br i1 %tb, label %adjb, label %loop\n") + emith("adjb:\n %b2 = lshr i64 %b1, 2\n store i64 %b2, ptr %bp\n br label %adj\n") + emith("loop:\n %b3 = load i64, ptr %bp\n %bz = icmp eq i64 %b3, 0\n br i1 %bz, label %done, label %body\n") + emith("body:\n %r1 = load i64, ptr %rp\n %n2 = load i64, ptr %np\n %rb = add i64 %r1, %b3\n %ge = icmp uge i64 %n2, %rb\n br i1 %ge, label %sub, label %shift\n") + emith("sub:\n %n3 = sub i64 %n2, %rb\n store i64 %n3, ptr %np\n %rsh = lshr i64 %r1, 1\n %rnew = add i64 %rsh, %b3\n store i64 %rnew, ptr %rp\n br label %next\n") + emith("shift:\n %rsh2 = lshr i64 %r1, 1\n store i64 %rsh2, ptr %rp\n br label %next\n") + emith("next:\n %b4 = lshr i64 %b3, 2\n store i64 %b4, ptr %bp\n br label %loop\n") + emith("done:\n %rf = load i64, ptr %rp\n %r32 = trunc i64 %rf to i32\n ret i32 %r32\n}\n") + emith("define i32 @fn_fx_sin(i32 %x) {\n") + emith(" %xe = sext i32 %x to i64\n %m = mul i64 %xe, 2670177\n %idxf = ashr i64 %m, 16\n") + emith(" %i0 = ashr i64 %idxf, 16\n %i0m = and i64 %i0, 255\n %frac = and i64 %idxf, 65535\n") + emith(" %i1 = add i64 %i0m, 1\n %i1m = and i64 %i1, 255\n") + emith(" %p0 = getelementptr [256 x i32], ptr @L_sin_tab, i64 0, i64 %i0m\n %v0 = load i32, ptr %p0\n") + emith(" %p1 = getelementptr [256 x i32], ptr @L_sin_tab, i64 0, i64 %i1m\n %v1 = load i32, ptr %p1\n") + emith(" %d = sub i32 %v1, %v0\n %de = sext i32 %d to i64\n %dm = mul i64 %de, %frac\n %dsh = ashr i64 %dm, 16\n %dsh32 = trunc i64 %dsh to i32\n %res = add i32 %v0, %dsh32\n ret i32 %res\n}\n") + emith("define i32 @fn_fx_atan2(i32 %y, i32 %x) {\n") + emith("entry:\n") + emith(" %xz = icmp eq i32 %x, 0\n") + emith(" %yz = icmp eq i32 %y, 0\n") + emith(" %both0 = and i1 %xz, %yz\n") + emith(" br i1 %both0, label %z, label %go\n") + emith("z:\n") + emith(" ret i32 0\n") + emith("go:\n") + emith(" %yneg = icmp slt i32 %y, 0\n") + emith(" %yng = sub i32 0, %y\n") + emith(" %ay0 = select i1 %yneg, i32 %yng, i32 %y\n") + emith(" %ay = add i32 %ay0, 1\n") + emith(" %xpos = icmp sge i32 %x, 0\n") + emith(" br i1 %xpos, label %xp, label %xn\n") + emith("xp:\n") + emith(" %n1 = sub i32 %x, %ay\n") + emith(" %d1 = add i32 %x, %ay\n") + emith(" br label %dv\n") + emith("xn:\n") + emith(" %n2 = add i32 %x, %ay\n") + emith(" %d2 = sub i32 %ay, %x\n") + emith(" br label %dv\n") + emith("dv:\n") + emith(" %num = phi i32 [ %n1, %xp ], [ %n2, %xn ]\n") + emith(" %den = phi i32 [ %d1, %xp ], [ %d2, %xn ]\n") + emith(" %base = phi i32 [ 51472, %xp ], [ 154416, %xn ]\n") + emith(" %n64 = sext i32 %num to i64\n") + emith(" %nsh = shl i64 %n64, 16\n") + emith(" %d64 = sext i32 %den to i64\n") + emith(" %rdv = sdiv i64 %nsh, %d64\n") + emith(" %r = trunc i64 %rdv to i32\n") + emith(" %r64a = sext i32 %r to i64\n") + emith(" %r64b = sext i32 %r to i64\n") + emith(" %rr = mul i64 %r64a, %r64b\n") + emith(" %rrs = ashr i64 %rr, 16\n") + emith(" %r2 = trunc i64 %rrs to i32\n") + emith(" %r2e = sext i32 %r2 to i64\n") + emith(" %re = sext i32 %r to i64\n") + emith(" %r3m = mul i64 %r2e, %re\n") + emith(" %r3s = ashr i64 %r3m, 16\n") + emith(" %r3 = trunc i64 %r3s to i32\n") + emith(" %r3e = sext i32 %r3 to i64\n") + emith(" %c1 = mul i64 %r3e, 12865\n") + emith(" %c1s = ashr i64 %c1, 16\n") + emith(" %t1 = trunc i64 %c1s to i32\n") + emith(" %re2 = sext i32 %r to i64\n") + emith(" %c2 = mul i64 %re2, 64337\n") + emith(" %c2s = ashr i64 %c2, 16\n") + emith(" %t2 = trunc i64 %c2s to i32\n") + emith(" %poly = sub i32 %t1, %t2\n") + emith(" %angle = add i32 %poly, %base\n") + emith(" %angneg = sub i32 0, %angle\n") + emith(" %res = select i1 %yneg, i32 %angneg, i32 %angle\n") + emith(" ret i32 %res\n") + emith("}\n") } diff --git a/selfhost/emit_mem.ludic b/selfhost/emit_mem.ludic new file mode 100644 index 00000000..8179857d --- /dev/null +++ b/selfhost/emit_mem.ludic @@ -0,0 +1,48 @@ +# emit_mem.ludic — the Mem.* namespace: raw buffers and byte pokes. bytes/words +# allocate (as the bare builtins do); copy/fill wrap memcpy/memset; peek/poke +# read and write one byte. The low-level escape hatch, PICO-8's memcpy/memset/ +# peek/poke by another name. + +fn is_mem_ns(meth: ptr) -> bool { + if (meth == "bytes") or (meth == "words") { return true } + if (meth == "copy") or (meth == "fill") or (meth == "peek") or (meth == "poke") { return true } + return false +} + +fn emit_mem_ns(meth: ptr, e: Node) -> Val { + if (meth == "bytes") { # allocate n bytes -> a byte buffer + let n = emit_expr(e.kids[0]) + let w = emit_bind(`zext i32 {n.code} to i64`) + return val(emit_bind(`call ptr @malloc(i64 {w})`), "ptr") + } + if (meth == "words") { # allocate n 32-bit words + let n = emit_expr(e.kids[0]) + let by = emit_bind(`mul i32 {n.code}, 4`) + let w = emit_bind(`zext i32 {by} to i64`) + return val(emit_bind(`call ptr @malloc(i64 {w})`), "words") + } + if (meth == "copy") { # copy n bytes src -> dst + let dst = emit_expr(e.kids[0]); let src = emit_expr(e.kids[1]); let n = emit_expr(e.kids[2]) + let w = emit_bind(`zext i32 {n.code} to i64`) + emit(" call ptr @memcpy(ptr "); emit(dst.code); emit(", ptr "); emit(src.code); emit(", i64 "); emit(w); emit(")\n") + return val("0", "void") + } + if (meth == "fill") { # set n bytes of buf to value v + let buf = emit_expr(e.kids[0]); let v = emit_expr(e.kids[1]); let n = emit_expr(e.kids[2]) + let w = emit_bind(`zext i32 {n.code} to i64`) + emit(" call ptr @memset(ptr "); emit(buf.code); emit(", i32 "); emit(v.code); emit(", i64 "); emit(w); emit(")\n") + return val("0", "void") + } + if (meth == "peek") { # read one byte at buf[i], 0..255 + let buf = emit_expr(e.kids[0]); let i = emit_expr(e.kids[1]) + let p = emit_bind(`getelementptr inbounds i8, ptr {buf.code}, i32 {i.code}`) + let c = emit_bind(`load i8, ptr {p}`) + return val(emit_bind(`zext i8 {c} to i32`), "int") + } + # poke: write the low byte of v at buf[i] + let buf = emit_expr(e.kids[0]); let i = emit_expr(e.kids[1]); let v = emit_expr(e.kids[2]) + let p = emit_bind(`getelementptr inbounds i8, ptr {buf.code}, i32 {i.code}`) + let b = emit_bind(`trunc i32 {v.code} to i8`) + emit(" store i8 "); emit(b); emit(", ptr "); emit(p); emit("\n") + return val("0", "void") +} diff --git a/selfhost/emit_text.ludic b/selfhost/emit_text.ludic new file mode 100644 index 00000000..19ecf12b --- /dev/null +++ b/selfhost/emit_text.ludic @@ -0,0 +1,558 @@ +# emit_text.ludic — the Text.* namespace over `str` (null-terminated byte +# strings). The libc-backed queries (length/char_at/starts_with/ends_with/ +# contains/index_of/to_int) allocate nothing; slice/from_int/equals/concat reuse +# the string preludes that the `+`, `s[a..b]` and str(int) operators emit. + +fn is_text_ns(meth: ptr) -> bool { + if (meth == "length") or (meth == "char_at") or (meth == "slice") { return true } + if (meth == "equals") or (meth == "concat") or (meth == "to_int") or (meth == "from_int") { return true } + if (meth == "starts_with") or (meth == "ends_with") { return true } + if (meth == "contains") or (meth == "index_of") { return true } + if (meth == "upper") or (meth == "lower") or (meth == "trim") or (meth == "repeat") { return true } + if (meth == "pad_left") or (meth == "pad_right") { return true } + if (meth == "split") or (meth == "join") or (meth == "replace") { return true } + return false +} + +fn emit_text_ns(meth: ptr, e: Node) -> Val { + if (meth == "from_int") { # int -> str, same as str(n) + let n = emit_expr(e.kids[0]) + g_uses_intstr = true + return val(emit_bind(`call ptr @fn_int_str(i32 {n.code})`), "str") + } + if (meth == "slice") { # s[a..b], same substring helper + let s0 = emit_expr(e.kids[0]); let a = emit_expr(e.kids[1]); let b = emit_expr(e.kids[2]) + g_uses_strslice = true + return val(emit_bind(`call ptr @fn_str_slice(ptr {s0.code}, i32 {a.code}, i32 {b.code})`), "str") + } + if (meth == "equals") { # byte-wise equality, same as == + let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]) + g_uses_str = true + return val(emit_bind(`call i32 @fn_str_eq(ptr {a.code}, ptr {b.code})`), "bool") + } + if (meth == "concat") { # a + b, same as the + operator + let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]) + g_uses_str = true + return val(emit_bind(`call ptr @fn_str_concat(ptr {a.code}, ptr {b.code})`), "str") + } + + let s = emit_expr(e.kids[0]) + if (meth == "length") { # byte length + let r = emit_bind(`call i64 @strlen(ptr {s.code})`) + return val(emit_bind(`trunc i64 {r} to i32`), "int") + } + if (meth == "char_at") { # the byte at index i, 0..255 + let i = emit_expr(e.kids[1]) + let a = emit_bind(`getelementptr inbounds i8, ptr {s.code}, i32 {i.code}`) + let c = emit_bind(`load i8, ptr {a}`) + return val(emit_bind(`zext i8 {c} to i32`), "int") + } + if (meth == "to_int") { # parse a leading integer, 0 if none + return val(emit_bind(`call i32 @atoi(ptr {s.code})`), "int") + } + if (meth == "upper") { # ASCII a-z -> A-Z, fresh string + g_uses_textrt = true + return val(emit_bind(`call ptr @fn_str_upper(ptr {s.code})`), "str") + } + if (meth == "lower") { # ASCII A-Z -> a-z, fresh string + g_uses_textrt = true + return val(emit_bind(`call ptr @fn_str_lower(ptr {s.code})`), "str") + } + if (meth == "trim") { # drop leading/trailing whitespace + g_uses_textrt = true + return val(emit_bind(`call ptr @fn_str_trim(ptr {s.code})`), "str") + } + if (meth == "repeat") { # s repeated n times + g_uses_textrt = true + let n = emit_expr(e.kids[1]) + return val(emit_bind(`call ptr @fn_str_repeat(ptr {s.code}, i32 {n.code})`), "str") + } + if (meth == "pad_left") { # pad with spaces to width, on the left + g_uses_textrt = true + let w = emit_expr(e.kids[1]) + return val(emit_bind(`call ptr @fn_str_pad(ptr {s.code}, i32 {w.code}, i1 1)`), "str") + } + if (meth == "pad_right") { # pad with spaces to width, on the right + g_uses_textrt = true + let w = emit_expr(e.kids[1]) + return val(emit_bind(`call ptr @fn_str_pad(ptr {s.code}, i32 {w.code}, i1 0)`), "str") + } + if (meth == "replace") { # replace every `from` with `to` + g_uses_textrt2 = true + let from = emit_expr(e.kids[1]); let to = emit_expr(e.kids[2]) + return val(emit_bind(`call ptr @fn_str_replace(ptr {s.code}, ptr {from.code}, ptr {to.code})`), "str") + } + if (meth == "split") { # split on a separator -> []str + g_uses_textrt2 = true + let sep = emit_expr(e.kids[1]) + return val(emit_bind(`call ptr @fn_str_split(ptr {s.code}, ptr {sep.code})`), "[]str") + } + if (meth == "join") { # join a []str with a separator (s is the slice) + g_uses_textrt2 = true + let sep = emit_expr(e.kids[1]) + return val(emit_bind(`call ptr @fn_str_join(ptr {s.code}, ptr {sep.code})`), "str") + } + if (meth == "contains") or (meth == "index_of") { # substring search + let sub = emit_expr(e.kids[1]) + let p = emit_bind(`call ptr @strstr(ptr {s.code}, ptr {sub.code})`) + if (meth == "contains") { + let nn = emit_bind(`icmp ne ptr {p}, null`) + return val(emit_bind(`zext i1 {nn} to i32`), "bool") + } + let isnull = emit_bind(`icmp eq ptr {p}, null`) # index_of -> byte offset or -1 + let pi = emit_bind(`ptrtoint ptr {p} to i64`) + let si = emit_bind(`ptrtoint ptr {s.code} to i64`) + let d = emit_bind(`sub i64 {pi}, {si}`) + let d32 = emit_bind(`trunc i64 {d} to i32`) + return val(emit_bind(`select i1 {isnull}, i32 -1, i32 {d32}`), "int") + } + + # starts_with / ends_with: compare against the affix over its own length + let affix = emit_expr(e.kids[1]) + let la = emit_bind(`call i64 @strlen(ptr {affix.code})`) + if (meth == "starts_with") { # strncmp of the head is null-safe + let cmp = emit_bind(`call i32 @strncmp(ptr {s.code}, ptr {affix.code}, i64 {la})`) + let eqz = emit_bind(`icmp eq i32 {cmp}, 0`) + return val(emit_bind(`zext i1 {eqz} to i32`), "bool") + } + # ends_with: compare the tail, but only when the affix fits (else a negative + # offset would read before the string) — branch so the strncmp never underflows + let ls = emit_bind(`call i64 @strlen(ptr {s.code})`) + let off = emit_bind(`sub i64 {ls}, {la}`) + let res = emit_alloca("i32") + store_at("i32", "0", res) + let neg = emit_bind(`icmp slt i64 {off}, 0`) + let cmpl = lbl("ew_cmp"); let en = lbl("ew_end") + emit(" br i1 "); emit(neg); emit(", label %"); emit(en); emit(", label %"); emit(cmpl); emit("\n") + emit(cmpl); emit(":\n") + let tail = emit_bind(`getelementptr inbounds i8, ptr {s.code}, i64 {off}`) + let cmp = emit_bind(`call i32 @strncmp(ptr {tail}, ptr {affix.code}, i64 {la})`) + let eqz = emit_bind(`icmp eq i32 {cmp}, 0`) + let z = emit_bind(`zext i1 {eqz} to i32`) + store_at("i32", z, res) + emit(" br label %"); emit(en); emit("\n") + emit(en); emit(":\n") + return val(emit_bind(`load i32, ptr {res}`), "bool") +} + +# emit_text_prelude — string builders that allocate: upper/lower/trim/ +# repeat/pad. Emitted once per program that uses them (g_uses_textrt). Plain +# libc (strlen/malloc/memcpy), deterministic, C-string in and out. +fn emit_text_prelude() -> void { + emith("define ptr @fn_str_upper(ptr %s) {\n") + emith("entry:\n") + emith(" %n = call i64 @strlen(ptr %s)\n") + emith(" %sz = add i64 %n, 1\n") + emith(" %out = call ptr @malloc(i64 %sz)\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %cond\n") + emith("cond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %d = icmp ult i64 %i, %n\n") + emith(" br i1 %d, label %body, label %fin\n") + emith("body:\n") + emith(" %sp = getelementptr i8, ptr %s, i64 %i\n") + emith(" %c = load i8, ptr %sp\n") + emith(" %ge = icmp uge i8 %c, 97\n") + emith(" %le = icmp ule i8 %c, 122\n") + emith(" %in = and i1 %ge, %le\n") + emith(" %cc = add i8 %c, -32\n") + emith(" %oc = select i1 %in, i8 %cc, i8 %c\n") + emith(" %op = getelementptr i8, ptr %out, i64 %i\n") + emith(" store i8 %oc, ptr %op\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %cond\n") + emith("fin:\n") + emith(" %tp = getelementptr i8, ptr %out, i64 %n\n") + emith(" store i8 0, ptr %tp\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define ptr @fn_str_lower(ptr %s) {\n") + emith("entry:\n") + emith(" %n = call i64 @strlen(ptr %s)\n") + emith(" %sz = add i64 %n, 1\n") + emith(" %out = call ptr @malloc(i64 %sz)\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %cond\n") + emith("cond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %d = icmp ult i64 %i, %n\n") + emith(" br i1 %d, label %body, label %fin\n") + emith("body:\n") + emith(" %sp = getelementptr i8, ptr %s, i64 %i\n") + emith(" %c = load i8, ptr %sp\n") + emith(" %ge = icmp uge i8 %c, 65\n") + emith(" %le = icmp ule i8 %c, 90\n") + emith(" %in = and i1 %ge, %le\n") + emith(" %cc = add i8 %c, 32\n") + emith(" %oc = select i1 %in, i8 %cc, i8 %c\n") + emith(" %op = getelementptr i8, ptr %out, i64 %i\n") + emith(" store i8 %oc, ptr %op\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %cond\n") + emith("fin:\n") + emith(" %tp = getelementptr i8, ptr %out, i64 %n\n") + emith(" store i8 0, ptr %tp\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define ptr @fn_str_trim(ptr %s) {\n") + emith("entry:\n") + emith(" %n = call i64 @strlen(ptr %s)\n") + emith(" %sp = alloca i64\n") + emith(" %ep = alloca i64\n") + emith(" store i64 0, ptr %sp\n") + emith(" store i64 %n, ptr %ep\n") + emith(" br label %lcond\n") + emith("lcond:\n") + emith(" %a0 = load i64, ptr %sp\n") + emith(" %e0 = load i64, ptr %ep\n") + emith(" %lt0 = icmp ult i64 %a0, %e0\n") + emith(" br i1 %lt0, label %lchk, label %rcond\n") + emith("lchk:\n") + emith(" %p0 = getelementptr i8, ptr %s, i64 %a0\n") + emith(" %c0 = load i8, ptr %p0\n") + emith(" %ws0 = call i1 @fn_is_ws(i8 %c0)\n") + emith(" br i1 %ws0, label %linc, label %rcond\n") + emith("linc:\n") + emith(" %a1 = add i64 %a0, 1\n") + emith(" store i64 %a1, ptr %sp\n") + emith(" br label %lcond\n") + emith("rcond:\n") + emith(" %a2 = load i64, ptr %sp\n") + emith(" %e2 = load i64, ptr %ep\n") + emith(" %lt2 = icmp ult i64 %a2, %e2\n") + emith(" br i1 %lt2, label %rchk, label %build\n") + emith("rchk:\n") + emith(" %em1 = sub i64 %e2, 1\n") + emith(" %p1 = getelementptr i8, ptr %s, i64 %em1\n") + emith(" %c1 = load i8, ptr %p1\n") + emith(" %ws1 = call i1 @fn_is_ws(i8 %c1)\n") + emith(" br i1 %ws1, label %rdec, label %build\n") + emith("rdec:\n") + emith(" store i64 %em1, ptr %ep\n") + emith(" br label %rcond\n") + emith("build:\n") + emith(" %st = load i64, ptr %sp\n") + emith(" %en = load i64, ptr %ep\n") + emith(" %len = sub i64 %en, %st\n") + emith(" %sz = add i64 %len, 1\n") + emith(" %out = call ptr @malloc(i64 %sz)\n") + emith(" %src = getelementptr i8, ptr %s, i64 %st\n") + emith(" call ptr @memcpy(ptr %out, ptr %src, i64 %len)\n") + emith(" %tp = getelementptr i8, ptr %out, i64 %len\n") + emith(" store i8 0, ptr %tp\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define i1 @fn_is_ws(i8 %c) {\n") + emith(" %a = icmp eq i8 %c, 32\n") + emith(" %b = icmp eq i8 %c, 9\n") + emith(" %d = icmp eq i8 %c, 10\n") + emith(" %e = icmp eq i8 %c, 13\n") + emith(" %ab = or i1 %a, %b\n") + emith(" %de = or i1 %d, %e\n") + emith(" %r = or i1 %ab, %de\n") + emith(" ret i1 %r\n") + emith("}\n") + emith("define ptr @fn_str_repeat(ptr %s, i32 %n32) {\n") + emith("entry:\n") + emith(" %nneg = icmp slt i32 %n32, 0\n") + emith(" %nn = select i1 %nneg, i32 0, i32 %n32\n") + emith(" %n = zext i32 %nn to i64\n") + emith(" %L = call i64 @strlen(ptr %s)\n") + emith(" %tot = mul i64 %L, %n\n") + emith(" %sz = add i64 %tot, 1\n") + emith(" %out = call ptr @malloc(i64 %sz)\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %cond\n") + emith("cond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %d = icmp ult i64 %i, %n\n") + emith(" br i1 %d, label %body, label %fin\n") + emith("body:\n") + emith(" %off = mul i64 %i, %L\n") + emith(" %dst = getelementptr i8, ptr %out, i64 %off\n") + emith(" call ptr @memcpy(ptr %dst, ptr %s, i64 %L)\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %cond\n") + emith("fin:\n") + emith(" %tp = getelementptr i8, ptr %out, i64 %tot\n") + emith(" store i8 0, ptr %tp\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define ptr @fn_str_pad(ptr %s, i32 %w32, i1 %left) {\n") + emith("entry:\n") + emith(" %L = call i64 @strlen(ptr %s)\n") + emith(" %w0 = sext i32 %w32 to i64\n") + emith(" %need = icmp ugt i64 %w0, %L\n") + emith(" br i1 %need, label %do, label %copy\n") + emith("copy:\n") + emith(" %sz0 = add i64 %L, 1\n") + emith(" %o0 = call ptr @malloc(i64 %sz0)\n") + emith(" %e0 = add i64 %L, 0\n") + emith(" call ptr @memcpy(ptr %o0, ptr %s, i64 %L)\n") + emith(" %t0 = getelementptr i8, ptr %o0, i64 %L\n") + emith(" store i8 0, ptr %t0\n") + emith(" ret ptr %o0\n") + emith("do:\n") + emith(" %pad = sub i64 %w0, %L\n") + emith(" %sz = add i64 %w0, 1\n") + emith(" %out = call ptr @malloc(i64 %sz)\n") + emith(" br i1 %left, label %padleft, label %padright\n") + emith("padleft:\n") + emith(" call void @fn_fill_sp(ptr %out, i64 0, i64 %pad)\n") + emith(" %dstL = getelementptr i8, ptr %out, i64 %pad\n") + emith(" call ptr @memcpy(ptr %dstL, ptr %s, i64 %L)\n") + emith(" br label %term\n") + emith("padright:\n") + emith(" call ptr @memcpy(ptr %out, ptr %s, i64 %L)\n") + emith(" call void @fn_fill_sp(ptr %out, i64 %L, i64 %pad)\n") + emith(" br label %term\n") + emith("term:\n") + emith(" %tp = getelementptr i8, ptr %out, i64 %w0\n") + emith(" store i8 0, ptr %tp\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define void @fn_fill_sp(ptr %buf, i64 %start, i64 %count) {\n") + emith("entry:\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %cond\n") + emith("cond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %d = icmp ult i64 %i, %count\n") + emith(" br i1 %d, label %body, label %done\n") + emith("body:\n") + emith(" %off = add i64 %start, %i\n") + emith(" %p = getelementptr i8, ptr %buf, i64 %off\n") + emith(" store i8 32, ptr %p\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %cond\n") + emith("done:\n") + emith(" ret void\n") + emith("}\n") +} + +# emit_text2_prelude — the allocating Text ops that build strings/slices: +# replace, join (over a []str), split (returns a []str). Emitted once per +# program that uses them (g_uses_textrt2). Slices are the {data,len,cap} +# %LSlice with str (ptr) elements. +fn emit_text2_prelude() -> void { + emith("define ptr @fn_str_replace(ptr %s, ptr %from, ptr %to) {\n") + emith("entry:\n") + emith(" %lf = call i64 @strlen(ptr %from)\n") + emith(" %lz = icmp eq i64 %lf, 0\n") + emith(" br i1 %lz, label %copyall, label %scan\n") + emith("copyall:\n") + emith(" %ls0 = call i64 @strlen(ptr %s)\n") + emith(" %sz0 = add i64 %ls0, 1\n") + emith(" %o0 = call ptr @malloc(i64 %sz0)\n") + emith(" call ptr @memcpy(ptr %o0, ptr %s, i64 %sz0)\n") + emith(" ret ptr %o0\n") + emith("scan:\n") + emith(" %lt = call i64 @strlen(ptr %to)\n") + emith(" %ls = call i64 @strlen(ptr %s)\n") + emith(" %cntp = alloca i64\n") + emith(" store i64 0, ptr %cntp\n") + emith(" %curp = alloca ptr\n") + emith(" store ptr %s, ptr %curp\n") + emith(" br label %ccond\n") + emith("ccond:\n") + emith(" %cur = load ptr, ptr %curp\n") + emith(" %hit = call ptr @strstr(ptr %cur, ptr %from)\n") + emith(" %isnull = icmp eq ptr %hit, null\n") + emith(" br i1 %isnull, label %csize, label %cinc\n") + emith("cinc:\n") + emith(" %c0 = load i64, ptr %cntp\n") + emith(" %c1 = add i64 %c0, 1\n") + emith(" store i64 %c1, ptr %cntp\n") + emith(" %adv = getelementptr i8, ptr %hit, i64 %lf\n") + emith(" store ptr %adv, ptr %curp\n") + emith(" br label %ccond\n") + emith("csize:\n") + emith(" %cnt = load i64, ptr %cntp\n") + emith(" %delta = sub i64 %lt, %lf\n") + emith(" %grow = mul i64 %cnt, %delta\n") + emith(" %newlen = add i64 %ls, %grow\n") + emith(" %osz = add i64 %newlen, 1\n") + emith(" %out = call ptr @malloc(i64 %osz)\n") + emith(" %srcp = alloca ptr\n") + emith(" store ptr %s, ptr %srcp\n") + emith(" %dstp = alloca ptr\n") + emith(" store ptr %out, ptr %dstp\n") + emith(" br label %bcond\n") + emith("bcond:\n") + emith(" %src = load ptr, ptr %srcp\n") + emith(" %h2 = call ptr @strstr(ptr %src, ptr %from)\n") + emith(" %n2 = icmp eq ptr %h2, null\n") + emith(" br i1 %n2, label %tail, label %seg\n") + emith("seg:\n") + emith(" %si = ptrtoint ptr %src to i64\n") + emith(" %hi = ptrtoint ptr %h2 to i64\n") + emith(" %seglen = sub i64 %hi, %si\n") + emith(" %dst0 = load ptr, ptr %dstp\n") + emith(" call ptr @memcpy(ptr %dst0, ptr %src, i64 %seglen)\n") + emith(" %dst1 = getelementptr i8, ptr %dst0, i64 %seglen\n") + emith(" call ptr @memcpy(ptr %dst1, ptr %to, i64 %lt)\n") + emith(" %dst2 = getelementptr i8, ptr %dst1, i64 %lt\n") + emith(" store ptr %dst2, ptr %dstp\n") + emith(" %src2 = getelementptr i8, ptr %h2, i64 %lf\n") + emith(" store ptr %src2, ptr %srcp\n") + emith(" br label %bcond\n") + emith("tail:\n") + emith(" %src3 = load ptr, ptr %srcp\n") + emith(" %rem = call i64 @strlen(ptr %src3)\n") + emith(" %dst3 = load ptr, ptr %dstp\n") + emith(" %remp1 = add i64 %rem, 1\n") + emith(" call ptr @memcpy(ptr %dst3, ptr %src3, i64 %remp1)\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define ptr @fn_str_join(ptr %h, ptr %sep) {\n") + emith("entry:\n") + emith(" %lp = getelementptr inbounds %LSlice, ptr %h, i32 0, i32 1\n") + emith(" %len32 = load i32, ptr %lp\n") + emith(" %len = sext i32 %len32 to i64\n") + emith(" %dp = getelementptr inbounds %LSlice, ptr %h, i32 0, i32 0\n") + emith(" %data = load ptr, ptr %dp\n") + emith(" %lsep = call i64 @strlen(ptr %sep)\n") + emith(" %totp = alloca i64\n") + emith(" store i64 0, ptr %totp\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %scond\n") + emith("scond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %d = icmp ult i64 %i, %len\n") + emith(" br i1 %d, label %sbody, label %alloc\n") + emith("sbody:\n") + emith(" %ep = getelementptr ptr, ptr %data, i64 %i\n") + emith(" %es = load ptr, ptr %ep\n") + emith(" %el = call i64 @strlen(ptr %es)\n") + emith(" %t0 = load i64, ptr %totp\n") + emith(" %t1 = add i64 %t0, %el\n") + emith(" store i64 %t1, ptr %totp\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %scond\n") + emith("alloc:\n") + emith(" %nz = icmp ugt i64 %len, 0\n") + emith(" %lm1 = sub i64 %len, 1\n") + emith(" %seps = mul i64 %lm1, %lsep\n") + emith(" %sepsz = select i1 %nz, i64 %seps, i64 0\n") + emith(" %tot0 = load i64, ptr %totp\n") + emith(" %tot = add i64 %tot0, %sepsz\n") + emith(" %osz = add i64 %tot, 1\n") + emith(" %out = call ptr @malloc(i64 %osz)\n") + emith(" %dstp = alloca ptr\n") + emith(" store ptr %out, ptr %dstp\n") + emith(" %jp = alloca i64\n") + emith(" store i64 0, ptr %jp\n") + emith(" br label %jcond\n") + emith("jcond:\n") + emith(" %j = load i64, ptr %jp\n") + emith(" %d2 = icmp ult i64 %j, %len\n") + emith(" br i1 %d2, label %jbody, label %jfin\n") + emith("jbody:\n") + emith(" %jnz = icmp ugt i64 %j, 0\n") + emith(" br i1 %jnz, label %putsep, label %putel\n") + emith("putsep:\n") + emith(" %ds0 = load ptr, ptr %dstp\n") + emith(" call ptr @memcpy(ptr %ds0, ptr %sep, i64 %lsep)\n") + emith(" %ds1 = getelementptr i8, ptr %ds0, i64 %lsep\n") + emith(" store ptr %ds1, ptr %dstp\n") + emith(" br label %putel\n") + emith("putel:\n") + emith(" %ep2 = getelementptr ptr, ptr %data, i64 %j\n") + emith(" %es2 = load ptr, ptr %ep2\n") + emith(" %el2 = call i64 @strlen(ptr %es2)\n") + emith(" %ds2 = load ptr, ptr %dstp\n") + emith(" call ptr @memcpy(ptr %ds2, ptr %es2, i64 %el2)\n") + emith(" %ds3 = getelementptr i8, ptr %ds2, i64 %el2\n") + emith(" store ptr %ds3, ptr %dstp\n") + emith(" %j1 = add i64 %j, 1\n") + emith(" store i64 %j1, ptr %jp\n") + emith(" br label %jcond\n") + emith("jfin:\n") + emith(" %dsf = load ptr, ptr %dstp\n") + emith(" store i8 0, ptr %dsf\n") + emith(" ret ptr %out\n") + emith("}\n") + emith("define ptr @fn_str_split(ptr %s, ptr %sep) {\n") + emith("entry:\n") + emith(" %lsep = call i64 @strlen(ptr %sep)\n") + emith(" %cntp = alloca i64\n") + emith(" store i64 1, ptr %cntp\n") + emith(" %curp = alloca ptr\n") + emith(" store ptr %s, ptr %curp\n") + emith(" br label %ccond\n") + emith("ccond:\n") + emith(" %cur = load ptr, ptr %curp\n") + emith(" %hit = call ptr @strstr(ptr %cur, ptr %sep)\n") + emith(" %isnull = icmp eq ptr %hit, null\n") + emith(" br i1 %isnull, label %mk, label %cinc\n") + emith("cinc:\n") + emith(" %c0 = load i64, ptr %cntp\n") + emith(" %c1 = add i64 %c0, 1\n") + emith(" store i64 %c1, ptr %cntp\n") + emith(" %adv = getelementptr i8, ptr %hit, i64 %lsep\n") + emith(" store ptr %adv, ptr %curp\n") + emith(" br label %ccond\n") + emith("mk:\n") + emith(" %cnt = load i64, ptr %cntp\n") + emith(" %hdr = call ptr @malloc(i64 16)\n") + emith(" %arrsz = mul i64 %cnt, 8\n") + emith(" %arr = call ptr @malloc(i64 %arrsz)\n") + emith(" %d0 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 0\n") + emith(" store ptr %arr, ptr %d0\n") + emith(" %cnt32 = trunc i64 %cnt to i32\n") + emith(" %d1 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 1\n") + emith(" store i32 %cnt32, ptr %d1\n") + emith(" %d2 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 2\n") + emith(" store i32 %cnt32, ptr %d2\n") + emith(" %srcp = alloca ptr\n") + emith(" store ptr %s, ptr %srcp\n") + emith(" %ip = alloca i64\n") + emith(" store i64 0, ptr %ip\n") + emith(" br label %fcond\n") + emith("fcond:\n") + emith(" %i = load i64, ptr %ip\n") + emith(" %lt = icmp ult i64 %i, %cnt\n") + emith(" br i1 %lt, label %fbody, label %done\n") + emith("fbody:\n") + emith(" %src = load ptr, ptr %srcp\n") + emith(" %h2 = call ptr @strstr(ptr %src, ptr %sep)\n") + emith(" %n2 = icmp eq ptr %h2, null\n") + emith(" br i1 %n2, label %last, label %mid\n") + emith("mid:\n") + emith(" %si = ptrtoint ptr %src to i64\n") + emith(" %hi = ptrtoint ptr %h2 to i64\n") + emith(" %seglen = sub i64 %hi, %si\n") + emith(" br label %store\n") + emith("last:\n") + emith(" %rem = call i64 @strlen(ptr %src)\n") + emith(" br label %store\n") + emith("store:\n") + emith(" %seg = phi i64 [ %seglen, %mid ], [ %rem, %last ]\n") + emith(" %ssz = add i64 %seg, 1\n") + emith(" %sub = call ptr @malloc(i64 %ssz)\n") + emith(" %src2 = load ptr, ptr %srcp\n") + emith(" call ptr @memcpy(ptr %sub, ptr %src2, i64 %seg)\n") + emith(" %tp = getelementptr i8, ptr %sub, i64 %seg\n") + emith(" store i8 0, ptr %tp\n") + emith(" %slot = getelementptr ptr, ptr %arr, i64 %i\n") + emith(" store ptr %sub, ptr %slot\n") + emith(" %adv2 = getelementptr i8, ptr %h2, i64 %lsep\n") + emith(" store ptr %adv2, ptr %srcp\n") + emith(" %i1 = add i64 %i, 1\n") + emith(" store i64 %i1, ptr %ip\n") + emith(" br label %fcond\n") + emith("done:\n") + emith(" ret ptr %hdr\n") + emith("}\n") +} diff --git a/selfhost/emit_time.ludic b/selfhost/emit_time.ludic new file mode 100644 index 00000000..21c13f3a --- /dev/null +++ b/selfhost/emit_time.ludic @@ -0,0 +1,26 @@ +# emit_time.ludic — the Time.* namespace. frame/elapsed/delta are deterministic +# (driven by @L_frame, the per-frame counter the game loop increments); now() is +# the wall clock and is explicitly non-deterministic. The frame clock ticks at a +# fixed 60 per second, so delta is the constant 1/60 s = 1092 in Q16.16. + +fn is_time_ns(meth: ptr) -> bool { + if (meth == "frame") or (meth == "delta") or (meth == "elapsed") or (meth == "now") { return true } + return false +} + +fn emit_time_ns(meth: ptr, e: Node) -> Val { + if (meth == "frame") { # completed frames since start + return val(emit_bind("load i32, ptr @L_frame"), "int") + } + if (meth == "delta") { # seconds per frame, 1/60 (fixed) + return val("1092", "fixed") + } + if (meth == "elapsed") { # seconds since start = frame / 60 (fixed) + let f = emit_bind("load i32, ptr @L_frame") + return val(emit_bind(`mul i32 {f}, 1092`), "fixed") + } + # now: wall-clock seconds since the epoch — NON-DETERMINISTIC, for seeding / + # telemetry only, never the lockstep simulation. + let t = emit_bind("call i64 @time(ptr null)") + return val(emit_bind(`trunc i64 {t} to i32`), "int") +} diff --git a/selfhost/game-build.sh b/selfhost/game-build.sh deleted file mode 100755 index fc321288..00000000 --- a/selfhost/game-build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# game-build.sh — compile a Ludic GAME with the self-hosted compiler. The -# compiler resolves the game's own `import`s and auto-splices the Ludic runtime -# (runtime/native/core.ludic + its imports), exactly as the C compiler does. -# Headless only for now (renders to out.ppm). Run from the repo root. -# ./selfhost/game-build.sh -set -u -cd "$(dirname "$0")/.." -SH="$1"; GAME="$2"; OUT="$3" -CC="${LUDIC_CC:-clang}" -ERR="$(mktemp)" -"$SH" "$GAME" > "$OUT.ll" 2>"$ERR" || { echo "self-host failed:"; head -5 "$ERR"; rm -f "$ERR"; exit 1; } -# -O2 removes the dead windowing branches (is_windowed()==0) so win_* need no defs -$CC -O2 "$OUT.ll" -o "$OUT" 2>"$ERR" || { echo "link failed:"; grep -i error "$ERR" | head -5; rm -f "$ERR"; exit 1; } -rm -f "$ERR" "$OUT.ll" # keep only the binary -echo "built $OUT" diff --git a/selfhost/golden/draw_prims.ppm b/selfhost/golden/draw_prims.ppm new file mode 100644 index 00000000..99339ee8 --- /dev/null +++ b/selfhost/golden/draw_prims.ppm @@ -0,0 +1,4 @@ +P6 +320 240 +255 +                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                                                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                                                         @ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@                                                                                                                                                                              ÿ@@ÿ@@                                                                                                                                   @ÿ@@ÿ@@ÿ@@ÿ@            @ÿ@@ÿ@@ÿ@@ÿ@                                                                                                                                                                            ÿ@@ÿ@@ÿ@@                                                                                                                              @ÿ@@ÿ@                    @ÿ@@ÿ@                                                                                                                                                                             ÿ@@ÿ@@                                                                                                                         @ÿ@@ÿ@@ÿ@                        @ÿ@@ÿ@@ÿ@                                                                                                                                                                            ÿ@@ÿ@@                                                                                                                      @ÿ@                              @ÿ@                                                                                                                                                                             ÿ@@ÿ@@                                                                                                                  @ÿ@@ÿ@                                @ÿ@@ÿ@                                                                                                                                                                             ÿ@@ÿ@@                                                                                                               @ÿ@                                    @ÿ@                                                                                                                                                                              ÿ@@ÿ@@                                                                                                            @ÿ@                                      @ÿ@                                                                                                                                                                               ÿ@@ÿ@@                                                                                                         @ÿ@                                        @ÿ@                                                                                                                                                                                ÿ@@ÿ@@                                                                                                      @ÿ@                                          @ÿ@                                                                                                                                                                                 ÿ@@ÿ@@                                                                                                   @ÿ@                                            @ÿ@                                                                                                                                                                                  ÿ@@ÿ@@                                                                                                @ÿ@                                              @ÿ@                                                                                                                                                                                   ÿ@@ÿ@@                                                                                             @ÿ@                                                @ÿ@                                                                                                                                                                                    ÿ@@ÿ@@                                                                                          @ÿ@                                                  @ÿ@                                                                                                                                                                                     ÿ@@ÿ@@                                                                                        @ÿ@                                                  @ÿ@                                                                                                                                                                                       ÿ@@ÿ@@                                                                                     @ÿ@                                                    @ÿ@                                                                                                                                                                                        ÿ@@ÿ@@ÿ@@                                                                                 @ÿ@                                                      @ÿ@                                                                                                                                                                                          ÿ@@ÿ@@                                                                               @ÿ@                                                      @ÿ@                                                                                                                                                                                            ÿ@@ÿ@@                                                                             @ÿ@                                                      @ÿ@                                                                                                                                                                                              ÿ@@ÿ@@                                                                          @ÿ@                                                        @ÿ@                                                                                                                                                                                               ÿ@@ÿ@@                                                                        @ÿ@                                                        @ÿ@                                                                                                                                                                                                 ÿ@@ÿ@@                                                                     @ÿ@                                                          @ÿ@                                                                                                                                                                                                  ÿ@@ÿ@@                                                                   @ÿ@                                                          @ÿ@                                                                                                                                                                                                    ÿ@@ÿ@@                                                                 @ÿ@                                                          @ÿ@                                                                                                                                                                                                      ÿ@@ÿ@@                                                               @ÿ@                                                          @ÿ@                                                                                                                                                                                                        ÿ@@ÿ@@                                                            @ÿ@                                                            @ÿ@                                                                                                                                                                                                         ÿ@@ÿ@@                                                          @ÿ@                                                            @ÿ@                                                                                                                                                                                                           ÿ@@ÿ@@                                                        @ÿ@                                                            @ÿ@                                                                                                                                                                                                             ÿ@@ÿ@@                                                      @ÿ@                                                            @ÿ@                                                                                                                                                                                                               ÿ@@ÿ@@                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                 ÿ@@ÿ@@                                                  @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                    @ÿ@                                                            @ÿ@                                                                                                                                                                                                                                                                     @ÿ@                                                          @ÿ@                                                                                                                                                                                                                                                                      @ÿ@                                                          @ÿ@                                                                                                                                                                                                                                                                      @ÿ@                                                          @ÿ@                                                                                                                                                                                                                                                                      @ÿ@                                                          @ÿ@                                                                                                                                                                                                                                                                       @ÿ@                                                        @ÿ@                                                                                                                                                                                                                                                                        @ÿ@                                                        @ÿ@                                                                                                                                                                                                                                                                         @ÿ@                                                      @ÿ@                                                                                                                                                                                                                                                                          @ÿ@                                                      @ÿ@                                                                                                                                                                                                                                                                          @ÿ@                                                      @ÿ@                                                                                                                                                                                                                                                                           @ÿ@                                                    @ÿ@                                                                                                                                                                                                                                                                             @ÿ@                                                  @ÿ@                                                                                                                                                                                                                                                                              @ÿ@                                                  @ÿ@                                                                                                                                                                                                                                                                               @ÿ@                                                @ÿ@                                                                                                                                                                                                                                                                                 @ÿ@                                              @ÿ@                                                                                                                                                                                                                                                                                   @ÿ@                                            @ÿ@                                                                                                                                                                                                                                                                                     @ÿ@                                          @ÿ@                                                                                                                                                                                                                                                                                       @ÿ@                                        @ÿ@                                                                                                                                                                                                                                                                                         @ÿ@                                      @ÿ@                                                                                                                                                                                                                                                                                           @ÿ@                                    @ÿ@                                                                                                                                                                                                                                                                                             @ÿ@@ÿ@                                @ÿ@@ÿ@                                                                                                                                                                                                                                                                                                @ÿ@                              @ÿ@                                                                                                                                                                                                                                                                                                   @ÿ@@ÿ@@ÿ@                        @ÿ@@ÿ@@ÿ@                                                                                                                                                                                                                                                                                                       @ÿ@@ÿ@                    @ÿ@@ÿ@                                                                                                                                                                                                                                                                                                            @ÿ@@ÿ@@ÿ@@ÿ@            @ÿ@@ÿ@@ÿ@@ÿ@                                                                                                                                                                                                                                                                                                                  @ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@@ÿ@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                                                                                                                                             ÿÐ@    ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                                                                                                                                       ÿÐ@          ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                                                                                                                                ÿÐ@                 ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                                                                                                                         ÿÐ@                        ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                                                                                                                   ÿÐ@                              ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                                          @`ÿ                                                                                  ÿÐ@                                     ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                             ÿÐ@                                           ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                                   @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                          ÿÐ@                                                  ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                        ÿÐ@                                                         ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                                 @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                       ÿÐ@                                                               ÿÐ@ÿÐ@ÿÐ@ÿÐ@                                                                                                                                                            @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                      ÿÐ@                                                                 ÿÐ@                                                                                                                                                            @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                     ÿÐ@                                                                 ÿÐ@                                                                                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                     ÿÐ@                                                               ÿÐ@                                                                                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                    ÿÐ@                                                               ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                    ÿÐ@                                                             ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                             ÿÐ@                                                                                                                                                         @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                            ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                          ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                          ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                         ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                        ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                       ÿÐ@                                                                                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                      ÿÐ@                                                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                     ÿÐ@                                                                                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                  ÿÐ@                                                    ÿÐ@                                                                                                                                                            @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                   ÿÐ@                                                                                                                                                            @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                  ÿÐ@                                                                                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                  ÿÐ@                                                                                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                    ÿÐ@                                                ÿÐ@                                                                                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                   ÿÐ@                                                ÿÐ@                               ÿ@ÿ                                                                                                                               @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                     ÿÐ@                                              ÿÐ@                                 ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                     ÿÐ@                                             ÿÐ@                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                     @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                     ÿÐ@                                             ÿÐ@                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                      ÿÐ@                                           ÿÐ@                                    ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                      ÿÐ@                                           ÿÐ@                                    ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                      @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                      ÿÐ@                                          ÿÐ@                                     ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                  @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                        ÿÐ@                                         ÿÐ@                                      ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                        ÿÐ@                                        ÿÐ@                                       ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                        @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                         ÿÐ@                                      ÿÐ@                                        ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                    @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                          ÿÐ@                                      ÿÐ@                                         ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                               @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                          ÿÐ@                                     ÿÐ@                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                 @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                            ÿÐ@                                    ÿÐ@                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                  @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                            ÿÐ@                                   ÿÐ@                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                   @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                             ÿÐ@                                   ÿÐ@                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                     @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                               ÿÐ@                                 ÿÐ@                                             ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                      @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                ÿÐ@                                ÿÐ@                                               ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                        @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                  ÿÐ@                               ÿÐ@                                               ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                          @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                   ÿÐ@                              ÿÐ@                                                ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                           @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                    ÿÐ@                              ÿÐ@                                                 ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                             @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                      ÿÐ@                            ÿÐ@                                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                               @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                        ÿÐ@                            ÿÐ@                                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                  @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                          ÿÐ@                           ÿÐ@                                                    ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                      @`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ@`ÿ                                                                                              ÿÐ@                         ÿÐ@                                                     ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                            @`ÿ                                                                                                    ÿÐ@                         ÿÐ@                                                     ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                  ÿÐ@                       ÿÐ@                                                       ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                  ÿÐ@                       ÿÐ@                                                       ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                   ÿÐ@                      ÿÐ@                                                        ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                     ÿÐ@                     ÿÐ@                                                         ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                     ÿÐ@                    ÿÐ@                                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                      ÿÐ@                   ÿÐ@                                                           ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                       ÿÐ@                  ÿÐ@                                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                        ÿÐ@                 ÿÐ@                                                             ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                          ÿÐ@                ÿÐ@                                                             ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                          ÿÐ@               ÿÐ@                                                               ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                           ÿÐ@               ÿÐ@                                                               ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                            ÿÐ@             ÿÐ@                                                                ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                             ÿÐ@            ÿÐ@                                                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                              ÿÐ@            ÿÐ@                                                                  ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                               ÿÐ@          ÿÐ@                                                                   ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                ÿÐ@          ÿÐ@                                                                    ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                 ÿÐ@        ÿÐ@                                                                     ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                  ÿÐ@        ÿÐ@                                                                     ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                   ÿÐ@       ÿÐ@                                                                       ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                    ÿÐ@     ÿÐ@                                                                        ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                     ÿÐ@     ÿÐ@                                                                        ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                     ÿÐ@    ÿÐ@                                                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                       ÿÐ@   ÿÐ@                                                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                        ÿÐ@  ÿÐ@                                                                           ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                         ÿÐ@ÿÐ@                                                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                          ÿÐ@                                                                             ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                       ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                         ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                          ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                            ÿ@ÿÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                             ÿ@ÿÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                               ÿ@ÿÿ@ÿ                                                                                                                                                                                                                                                                                                                               ÿ@ÿ                                                                                                                                                                                                                                                                                                                                ÿ@ÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/selfhost/lex.ludic b/selfhost/lex.ludic index 6872d09f..64abb805 100644 --- a/selfhost/lex.ludic +++ b/selfhost/lex.ludic @@ -115,9 +115,15 @@ fn lex(src: ptr) -> void { # a fractional part makes it a Q16.16 fixed literal if i < n and src[i] == 46 and char_is_digit(src[i + 1]) { i = i + 1 + # Accumulate only the first 4 fractional digits: `fnum << 16` must stay + # in i32 (5+ digits overflow), and Q16.16 resolves ~4-5 decimals anyway. + # Extra digits are still consumed so they don't become a stray token. var fnum = 0; var fden = 1 - while i < n and char_is_digit(src[i]) { fnum = fnum * 10 + (src[i] - 48); fden = fden * 10; i = i + 1 } - let bits = (v << 16) + (fnum << 16) / fden + while i < n and char_is_digit(src[i]) { + if fden < 10000 { fnum = fnum * 10 + (src[i] - 48); fden = fden * 10 } + i = i + 1 + } + let bits = (v << 16) + ((fnum << 16) + (fden >> 1)) / fden tok_push(TK_FLOAT, null, bits, line) continue } diff --git a/selfhost/ludicc.seed.ll b/selfhost/ludicc.seed.ll index 2e2de5e6..967edc08 100644 --- a/selfhost/ludicc.seed.ll +++ b/selfhost/ludicc.seed.ll @@ -15,6 +15,9 @@ declare ptr @getenv(ptr) declare ptr @memcpy(ptr, ptr, i64) declare ptr @memset(ptr, i32, i64) declare i64 @strlen(ptr) +declare i32 @strncmp(ptr, ptr, i64) +declare ptr @strstr(ptr, ptr) +declare i32 @atoi(ptr) declare i32 @getchar() declare i32 @putchar(i32) declare i64 @time(ptr) @@ -55,6 +58,9 @@ declare void @win_close() @g_g_uses_str = internal global i32 0 @g_g_uses_intstr = internal global i32 0 @g_g_uses_strslice = internal global i32 0 +@g_g_uses_mathrt = internal global i32 0 +@g_g_uses_textrt = internal global i32 0 +@g_g_uses_textrt2 = internal global i32 0 @g_brk_lbl = internal global ptr null @g_cnt_lbl = internal global ptr null @g_nloop = internal global i32 0 @@ -473,2743 +479,4582 @@ declare void @win_close() @.str381 = private unnamed_addr constant [36 x i8] c"declare ptr @memcpy(ptr, ptr, i64)\0A\00" @.str382 = private unnamed_addr constant [36 x i8] c"declare ptr @memset(ptr, i32, i64)\0A\00" @.str383 = private unnamed_addr constant [26 x i8] c"declare i64 @strlen(ptr)\0A\00" -@.str384 = private unnamed_addr constant [24 x i8] c"declare i32 @getchar()\0A\00" -@.str385 = private unnamed_addr constant [27 x i8] c"declare i32 @putchar(i32)\0A\00" -@.str386 = private unnamed_addr constant [24 x i8] c"declare i64 @time(ptr)\0A\00" -@.str387 = private unnamed_addr constant [44 x i8] c"declare void @win_open(i32, i32, i32, ptr)\0A\00" -@.str388 = private unnamed_addr constant [25 x i8] c"declare i32 @win_poll()\0A\00" -@.str389 = private unnamed_addr constant [42 x i8] c"declare void @win_present(ptr, i32, i32)\0A\00" -@.str390 = private unnamed_addr constant [28 x i8] c"declare i32 @win_running()\0A\00" -@.str391 = private unnamed_addr constant [27 x i8] c"declare void @win_close()\0A\00" -@.str392 = private unnamed_addr constant [34 x i8] c"@__stderrp = external global ptr\0A\00" -@.str393 = private unnamed_addr constant [34 x i8] c"@__stdoutp = external global ptr\0A\00" -@.str394 = private unnamed_addr constant [64 x i8] c"@.fmt_int = private unnamed_addr constant [4 x i8] c\22%d\5C0A\5C00\22\0A\00" -@.str395 = private unnamed_addr constant [65 x i8] c"@.fmt_line = private unnamed_addr constant [4 x i8] c\22%s\5C0A\5C00\22\0A\00" -@.str396 = private unnamed_addr constant [33 x i8] c"@L_argc = internal global i32 0\0A\00" -@.str397 = private unnamed_addr constant [36 x i8] c"@L_argv = internal global ptr null\0A\00" -@.str398 = private unnamed_addr constant [46 x i8] c"@.gametitle = private unnamed_addr constant [\00" -@.str399 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" -@.str400 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" -@.str401 = private unnamed_addr constant [34 x i8] c"%LSlice = type { ptr, i32, i32 }\0A\00" -@.str402 = private unnamed_addr constant [11 x i8] c" = type { \00" -@.str403 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str404 = private unnamed_addr constant [3 x i8] c", \00" -@.str405 = private unnamed_addr constant [4 x i8] c" }\0A\00" -@.str406 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str407 = private unnamed_addr constant [20 x i8] c" = internal global \00" -@.str408 = private unnamed_addr constant [2 x i8] c" \00" -@.str409 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str410 = private unnamed_addr constant [9 x i8] c"declare \00" -@.str411 = private unnamed_addr constant [3 x i8] c" @\00" -@.str412 = private unnamed_addr constant [2 x i8] c"(\00" -@.str413 = private unnamed_addr constant [3 x i8] c", \00" -@.str414 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str415 = private unnamed_addr constant [41 x i8] c"define i32 @fn_str_eq(ptr %a, ptr %b) {\0A\00" -@.str416 = private unnamed_addr constant [25 x i8] c"entry:\0A br label %loop\0A\00" -@.str417 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\0A\00" -@.str418 = private unnamed_addr constant [51 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %i\0A\00" -@.str419 = private unnamed_addr constant [51 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %i\0A\00" -@.str420 = private unnamed_addr constant [51 x i8] c" %ca = load i8, ptr %pa\0A %cb = load i8, ptr %pb\0A\00" -@.str421 = private unnamed_addr constant [66 x i8] c" %df = icmp ne i8 %ca, %cb\0A br i1 %df, label %ret0, label %chk\0A\00" -@.str422 = 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" -@.str423 = private unnamed_addr constant [46 x i8] c"cont:\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" -@.str424 = private unnamed_addr constant [39 x i8] c"ret1:\0A ret i32 1\0Aret0:\0A ret i32 0\0A}\0A\00" -@.str425 = private unnamed_addr constant [45 x i8] c"define ptr @fn_str_concat(ptr %a, ptr %b) {\0A\00" -@.str426 = private unnamed_addr constant [23 x i8] c"entry:\0A br label %al\0A\00" -@.str427 = private unnamed_addr constant [51 x i8] c"al:\0A %ia = phi i32 [ 0, %entry ], [ %ia1, %alb ]\0A\00" -@.str428 = private unnamed_addr constant [78 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %ia\0A %cca = load i8, ptr %pa\0A\00" -@.str429 = private unnamed_addr constant [64 x i8] c" %za = icmp eq i8 %cca, 0\0A br i1 %za, label %bl0, label %alb\0A\00" -@.str430 = private unnamed_addr constant [45 x i8] c"alb:\0A %ia1 = add i32 %ia, 1\0A br label %al\0A\00" -@.str431 = private unnamed_addr constant [21 x i8] c"bl0:\0A br label %bl\0A\00" -@.str432 = private unnamed_addr constant [49 x i8] c"bl:\0A %ib = phi i32 [ 0, %bl0 ], [ %ib1, %blb ]\0A\00" -@.str433 = private unnamed_addr constant [78 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %ib\0A %ccb = load i8, ptr %pb\0A\00" -@.str434 = private unnamed_addr constant [66 x i8] c" %zb = icmp eq i8 %ccb, 0\0A br i1 %zb, label %alloc, label %blb\0A\00" -@.str435 = private unnamed_addr constant [45 x i8] c"blb:\0A %ib1 = add i32 %ib, 1\0A br label %bl\0A\00" -@.str436 = private unnamed_addr constant [58 x i8] c"alloc:\0A %sum = add i32 %ia, %ib\0A %sz = add i32 %sum, 1\0A\00" -@.str437 = 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" -@.str438 = private unnamed_addr constant [49 x i8] c"c1:\0A %i = phi i32 [ 0, %alloc ], [ %i1, %c1b ]\0A\00" -@.str439 = private unnamed_addr constant [66 x i8] c" %d1 = icmp slt i32 %i, %ia\0A br i1 %d1, label %c1b, label %c2i\0A\00" -@.str440 = 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" -@.str441 = private unnamed_addr constant [77 x i8] c" %o1 = getelementptr inbounds i8, ptr %out, i32 %i\0A store i8 %v1, ptr %o1\0A\00" -@.str442 = private unnamed_addr constant [38 x i8] c" %i1 = add i32 %i, 1\0A br label %c1\0A\00" -@.str443 = private unnamed_addr constant [21 x i8] c"c2i:\0A br label %c2\0A\00" -@.str444 = private unnamed_addr constant [47 x i8] c"c2:\0A %j = phi i32 [ 0, %c2i ], [ %j1, %c2b ]\0A\00" -@.str445 = private unnamed_addr constant [66 x i8] c" %d2 = icmp slt i32 %j, %ib\0A br i1 %d2, label %c2b, label %fin\0A\00" -@.str446 = 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" -@.str447 = 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" -@.str448 = private unnamed_addr constant [38 x i8] c" %j1 = add i32 %j, 1\0A br label %c2\0A\00" -@.str449 = 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" -@.str450 = private unnamed_addr constant [35 x i8] c"define ptr @fn_int_str(i32 %n0) {\0A\00" -@.str451 = private unnamed_addr constant [42 x i8] c"entry:\0A %buf = call ptr @malloc(i64 24)\0A\00" -@.str452 = private unnamed_addr constant [56 x i8] c" %isneg = icmp slt i32 %n0, 0\0A %neg = sub i32 0, %n0\0A\00" -@.str453 = private unnamed_addr constant [44 x i8] c" %n = select i1 %isneg, i32 %neg, i32 %n0\0A\00" -@.str454 = private unnamed_addr constant [79 x i8] c" %term = getelementptr inbounds i8, ptr %buf, i32 23\0A store i8 0, ptr %term\0A\00" -@.str455 = private unnamed_addr constant [70 x i8] c" %iszero = icmp eq i32 %n0, 0\0A br i1 %iszero, label %zc, label %dl\0A\00" -@.str456 = private unnamed_addr constant [94 x i8] c"zc:\0A %zp = getelementptr inbounds i8, ptr %buf, i32 22\0A store i8 48, ptr %zp\0A ret ptr %zp\0A\00" -@.str457 = private unnamed_addr constant [23 x i8] c"dl:\0A br label %dloop\0A\00" -@.str458 = private unnamed_addr constant [104 x i8] c"dloop:\0A %pos = phi i32 [ 22, %dl ], [ %pos2, %dbody ]\0A %cur = phi i32 [ %n, %dl ], [ %cur2, %dbody ]\0A\00" -@.str459 = private unnamed_addr constant [72 x i8] c" %done = icmp eq i32 %cur, 0\0A br i1 %done, label %sign, label %dbody\0A\00" -@.str460 = private unnamed_addr constant [85 x i8] c"dbody:\0A %d = urem i32 %cur, 10\0A %ch = add i32 %d, 48\0A %ch8 = trunc i32 %ch to i8\0A\00" -@.str461 = private unnamed_addr constant [80 x i8] c" %pp = getelementptr inbounds i8, ptr %buf, i32 %pos\0A store i8 %ch8, ptr %pp\0A\00" -@.str462 = private unnamed_addr constant [73 x i8] c" %cur2 = udiv i32 %cur, 10\0A %pos2 = sub i32 %pos, 1\0A br label %dloop\0A\00" -@.str463 = private unnamed_addr constant [49 x i8] c"sign:\0A br i1 %isneg, label %addneg, label %fin\0A\00" -@.str464 = private unnamed_addr constant [128 x i8] c"addneg:\0A %sp = getelementptr inbounds i8, ptr %buf, i32 %pos\0A store i8 45, ptr %sp\0A %posn = sub i32 %pos, 1\0A br label %fin\0A\00" -@.str465 = private unnamed_addr constant [60 x i8] c"fin:\0A %fpos = phi i32 [ %pos, %sign ], [ %posn, %addneg ]\0A\00" -@.str466 = private unnamed_addr constant [101 x i8] c" %rpos = add i32 %fpos, 1\0A %res = getelementptr inbounds i8, ptr %buf, i32 %rpos\0A ret ptr %res\0A}\0A\00" -@.str467 = private unnamed_addr constant [58 x i8] c"define ptr @fn_str_slice(ptr %s, i32 %start, i32 %end) {\0A\00" -@.str468 = private unnamed_addr constant [62 x i8] c"entry:\0A %len = sub i32 %end, %start\0A %sz = add i32 %len, 1\0A\00" -@.str469 = private unnamed_addr constant [85 x i8] c" %sz64 = sext i32 %sz to i64\0A %out = call ptr @malloc(i64 %sz64)\0A br label %loop\0A\00" -@.str470 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %body ]\0A\00" -@.str471 = private unnamed_addr constant [66 x i8] c" %d = icmp slt i32 %i, %len\0A br i1 %d, label %body, label %fin\0A\00" -@.str472 = private unnamed_addr constant [109 x i8] c"body:\0A %si = add i32 %start, %i\0A %sp = getelementptr inbounds i8, ptr %s, i32 %si\0A %c = load i8, ptr %sp\0A\00" -@.str473 = private unnamed_addr constant [115 x i8] c" %op = getelementptr inbounds i8, ptr %out, i32 %i\0A store i8 %c, ptr %op\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" -@.str474 = private unnamed_addr constant [99 x i8] c"fin:\0A %tp = getelementptr inbounds i8, ptr %out, i32 %len\0A store i8 0, ptr %tp\0A ret ptr %out\0A}\0A\00" -@.str475 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" -@.str476 = private unnamed_addr constant [15 x i8] c"no such field \00" -@.str477 = private unnamed_addr constant [3 x i8] c" \00" -@.str478 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str479 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str480 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str481 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str482 = private unnamed_addr constant [6 x i8] c"words\00" -@.str483 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds i32, ptr \00" -@.str484 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str485 = private unnamed_addr constant [4 x i8] c"int\00" -@.str486 = private unnamed_addr constant [7 x i8] c"fixeds\00" -@.str487 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds i32, ptr \00" -@.str488 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str489 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str490 = private unnamed_addr constant [5 x i8] c"ptrs\00" -@.str491 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds ptr, ptr \00" -@.str492 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str493 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str494 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str384 = private unnamed_addr constant [37 x i8] c"declare i32 @strncmp(ptr, ptr, i64)\0A\00" +@.str385 = private unnamed_addr constant [31 x i8] c"declare ptr @strstr(ptr, ptr)\0A\00" +@.str386 = private unnamed_addr constant [24 x i8] c"declare i32 @atoi(ptr)\0A\00" +@.str387 = private unnamed_addr constant [24 x i8] c"declare i32 @getchar()\0A\00" +@.str388 = private unnamed_addr constant [27 x i8] c"declare i32 @putchar(i32)\0A\00" +@.str389 = private unnamed_addr constant [24 x i8] c"declare i64 @time(ptr)\0A\00" +@.str390 = private unnamed_addr constant [44 x i8] c"declare void @win_open(i32, i32, i32, ptr)\0A\00" +@.str391 = private unnamed_addr constant [25 x i8] c"declare i32 @win_poll()\0A\00" +@.str392 = private unnamed_addr constant [42 x i8] c"declare void @win_present(ptr, i32, i32)\0A\00" +@.str393 = private unnamed_addr constant [28 x i8] c"declare i32 @win_running()\0A\00" +@.str394 = private unnamed_addr constant [27 x i8] c"declare void @win_close()\0A\00" +@.str395 = private unnamed_addr constant [34 x i8] c"@__stderrp = external global ptr\0A\00" +@.str396 = private unnamed_addr constant [34 x i8] c"@__stdoutp = external global ptr\0A\00" +@.str397 = private unnamed_addr constant [64 x i8] c"@.fmt_int = private unnamed_addr constant [4 x i8] c\22%d\5C0A\5C00\22\0A\00" +@.str398 = private unnamed_addr constant [65 x i8] c"@.fmt_line = private unnamed_addr constant [4 x i8] c\22%s\5C0A\5C00\22\0A\00" +@.str399 = private unnamed_addr constant [33 x i8] c"@L_argc = internal global i32 0\0A\00" +@.str400 = private unnamed_addr constant [36 x i8] c"@L_argv = internal global ptr null\0A\00" +@.str401 = private unnamed_addr constant [46 x i8] c"@.gametitle = private unnamed_addr constant [\00" +@.str402 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str403 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" +@.str404 = private unnamed_addr constant [34 x i8] c"%LSlice = type { ptr, i32, i32 }\0A\00" +@.str405 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str406 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str407 = private unnamed_addr constant [3 x i8] c", \00" +@.str408 = private unnamed_addr constant [4 x i8] c" }\0A\00" +@.str409 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str410 = private unnamed_addr constant [20 x i8] c" = internal global \00" +@.str411 = private unnamed_addr constant [2 x i8] c" \00" +@.str412 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str413 = private unnamed_addr constant [9 x i8] c"declare \00" +@.str414 = private unnamed_addr constant [3 x i8] c" @\00" +@.str415 = private unnamed_addr constant [2 x i8] c"(\00" +@.str416 = private unnamed_addr constant [3 x i8] c", \00" +@.str417 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str418 = private unnamed_addr constant [41 x i8] c"define i32 @fn_str_eq(ptr %a, ptr %b) {\0A\00" +@.str419 = private unnamed_addr constant [25 x i8] c"entry:\0A br label %loop\0A\00" +@.str420 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\0A\00" +@.str421 = private unnamed_addr constant [51 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %i\0A\00" +@.str422 = private unnamed_addr constant [51 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %i\0A\00" +@.str423 = private unnamed_addr constant [51 x i8] c" %ca = load i8, ptr %pa\0A %cb = load i8, ptr %pb\0A\00" +@.str424 = private unnamed_addr constant [66 x i8] c" %df = icmp ne i8 %ca, %cb\0A br i1 %df, label %ret0, label %chk\0A\00" +@.str425 = 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" +@.str426 = private unnamed_addr constant [46 x i8] c"cont:\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" +@.str427 = private unnamed_addr constant [39 x i8] c"ret1:\0A ret i32 1\0Aret0:\0A ret i32 0\0A}\0A\00" +@.str428 = private unnamed_addr constant [45 x i8] c"define ptr @fn_str_concat(ptr %a, ptr %b) {\0A\00" +@.str429 = private unnamed_addr constant [23 x i8] c"entry:\0A br label %al\0A\00" +@.str430 = private unnamed_addr constant [51 x i8] c"al:\0A %ia = phi i32 [ 0, %entry ], [ %ia1, %alb ]\0A\00" +@.str431 = private unnamed_addr constant [78 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %ia\0A %cca = load i8, ptr %pa\0A\00" +@.str432 = private unnamed_addr constant [64 x i8] c" %za = icmp eq i8 %cca, 0\0A br i1 %za, label %bl0, label %alb\0A\00" +@.str433 = private unnamed_addr constant [45 x i8] c"alb:\0A %ia1 = add i32 %ia, 1\0A br label %al\0A\00" +@.str434 = private unnamed_addr constant [21 x i8] c"bl0:\0A br label %bl\0A\00" +@.str435 = private unnamed_addr constant [49 x i8] c"bl:\0A %ib = phi i32 [ 0, %bl0 ], [ %ib1, %blb ]\0A\00" +@.str436 = private unnamed_addr constant [78 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %ib\0A %ccb = load i8, ptr %pb\0A\00" +@.str437 = private unnamed_addr constant [66 x i8] c" %zb = icmp eq i8 %ccb, 0\0A br i1 %zb, label %alloc, label %blb\0A\00" +@.str438 = private unnamed_addr constant [45 x i8] c"blb:\0A %ib1 = add i32 %ib, 1\0A br label %bl\0A\00" +@.str439 = private unnamed_addr constant [58 x i8] c"alloc:\0A %sum = add i32 %ia, %ib\0A %sz = add i32 %sum, 1\0A\00" +@.str440 = 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" +@.str441 = private unnamed_addr constant [49 x i8] c"c1:\0A %i = phi i32 [ 0, %alloc ], [ %i1, %c1b ]\0A\00" +@.str442 = private unnamed_addr constant [66 x i8] c" %d1 = icmp slt i32 %i, %ia\0A br i1 %d1, label %c1b, label %c2i\0A\00" +@.str443 = 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" +@.str444 = private unnamed_addr constant [77 x i8] c" %o1 = getelementptr inbounds i8, ptr %out, i32 %i\0A store i8 %v1, ptr %o1\0A\00" +@.str445 = private unnamed_addr constant [38 x i8] c" %i1 = add i32 %i, 1\0A br label %c1\0A\00" +@.str446 = private unnamed_addr constant [21 x i8] c"c2i:\0A br label %c2\0A\00" +@.str447 = private unnamed_addr constant [47 x i8] c"c2:\0A %j = phi i32 [ 0, %c2i ], [ %j1, %c2b ]\0A\00" +@.str448 = private unnamed_addr constant [66 x i8] c" %d2 = icmp slt i32 %j, %ib\0A br i1 %d2, label %c2b, label %fin\0A\00" +@.str449 = 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" +@.str450 = 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" +@.str451 = private unnamed_addr constant [38 x i8] c" %j1 = add i32 %j, 1\0A br label %c2\0A\00" +@.str452 = 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" +@.str453 = private unnamed_addr constant [35 x i8] c"define ptr @fn_int_str(i32 %n0) {\0A\00" +@.str454 = private unnamed_addr constant [42 x i8] c"entry:\0A %buf = call ptr @malloc(i64 24)\0A\00" +@.str455 = private unnamed_addr constant [56 x i8] c" %isneg = icmp slt i32 %n0, 0\0A %neg = sub i32 0, %n0\0A\00" +@.str456 = private unnamed_addr constant [44 x i8] c" %n = select i1 %isneg, i32 %neg, i32 %n0\0A\00" +@.str457 = private unnamed_addr constant [79 x i8] c" %term = getelementptr inbounds i8, ptr %buf, i32 23\0A store i8 0, ptr %term\0A\00" +@.str458 = private unnamed_addr constant [70 x i8] c" %iszero = icmp eq i32 %n0, 0\0A br i1 %iszero, label %zc, label %dl\0A\00" +@.str459 = private unnamed_addr constant [94 x i8] c"zc:\0A %zp = getelementptr inbounds i8, ptr %buf, i32 22\0A store i8 48, ptr %zp\0A ret ptr %zp\0A\00" +@.str460 = private unnamed_addr constant [23 x i8] c"dl:\0A br label %dloop\0A\00" +@.str461 = private unnamed_addr constant [104 x i8] c"dloop:\0A %pos = phi i32 [ 22, %dl ], [ %pos2, %dbody ]\0A %cur = phi i32 [ %n, %dl ], [ %cur2, %dbody ]\0A\00" +@.str462 = private unnamed_addr constant [72 x i8] c" %done = icmp eq i32 %cur, 0\0A br i1 %done, label %sign, label %dbody\0A\00" +@.str463 = private unnamed_addr constant [85 x i8] c"dbody:\0A %d = urem i32 %cur, 10\0A %ch = add i32 %d, 48\0A %ch8 = trunc i32 %ch to i8\0A\00" +@.str464 = private unnamed_addr constant [80 x i8] c" %pp = getelementptr inbounds i8, ptr %buf, i32 %pos\0A store i8 %ch8, ptr %pp\0A\00" +@.str465 = private unnamed_addr constant [73 x i8] c" %cur2 = udiv i32 %cur, 10\0A %pos2 = sub i32 %pos, 1\0A br label %dloop\0A\00" +@.str466 = private unnamed_addr constant [49 x i8] c"sign:\0A br i1 %isneg, label %addneg, label %fin\0A\00" +@.str467 = private unnamed_addr constant [128 x i8] c"addneg:\0A %sp = getelementptr inbounds i8, ptr %buf, i32 %pos\0A store i8 45, ptr %sp\0A %posn = sub i32 %pos, 1\0A br label %fin\0A\00" +@.str468 = private unnamed_addr constant [60 x i8] c"fin:\0A %fpos = phi i32 [ %pos, %sign ], [ %posn, %addneg ]\0A\00" +@.str469 = private unnamed_addr constant [101 x i8] c" %rpos = add i32 %fpos, 1\0A %res = getelementptr inbounds i8, ptr %buf, i32 %rpos\0A ret ptr %res\0A}\0A\00" +@.str470 = private unnamed_addr constant [58 x i8] c"define ptr @fn_str_slice(ptr %s, i32 %start, i32 %end) {\0A\00" +@.str471 = private unnamed_addr constant [62 x i8] c"entry:\0A %len = sub i32 %end, %start\0A %sz = add i32 %len, 1\0A\00" +@.str472 = private unnamed_addr constant [85 x i8] c" %sz64 = sext i32 %sz to i64\0A %out = call ptr @malloc(i64 %sz64)\0A br label %loop\0A\00" +@.str473 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %body ]\0A\00" +@.str474 = private unnamed_addr constant [66 x i8] c" %d = icmp slt i32 %i, %len\0A br i1 %d, label %body, label %fin\0A\00" +@.str475 = private unnamed_addr constant [109 x i8] c"body:\0A %si = add i32 %start, %i\0A %sp = getelementptr inbounds i8, ptr %s, i32 %si\0A %c = load i8, ptr %sp\0A\00" +@.str476 = private unnamed_addr constant [115 x i8] c" %op = getelementptr inbounds i8, ptr %out, i32 %i\0A store i8 %c, ptr %op\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" +@.str477 = private unnamed_addr constant [99 x i8] c"fin:\0A %tp = getelementptr inbounds i8, ptr %out, i32 %len\0A store i8 0, ptr %tp\0A ret ptr %out\0A}\0A\00" +@.str478 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" +@.str479 = private unnamed_addr constant [15 x i8] c"no such field \00" +@.str480 = private unnamed_addr constant [3 x i8] c" \00" +@.str481 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str482 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str483 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str484 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str485 = private unnamed_addr constant [6 x i8] c"words\00" +@.str486 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds i32, ptr \00" +@.str487 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str488 = private unnamed_addr constant [4 x i8] c"int\00" +@.str489 = private unnamed_addr constant [7 x i8] c"fixeds\00" +@.str490 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds i32, ptr \00" +@.str491 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str492 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str493 = private unnamed_addr constant [5 x i8] c"ptrs\00" +@.str494 = private unnamed_addr constant [33 x i8] c"getelementptr inbounds ptr, ptr \00" @.str495 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str496 = private unnamed_addr constant [5 x i8] c"byte\00" -@.str497 = private unnamed_addr constant [3 x i8] c" \00" -@.str498 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str499 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str496 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str497 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str498 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str499 = private unnamed_addr constant [5 x i8] c"byte\00" @.str500 = private unnamed_addr constant [3 x i8] c" \00" -@.str501 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" -@.str502 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str501 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str502 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" @.str503 = private unnamed_addr constant [3 x i8] c" \00" -@.str504 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str505 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str506 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str507 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str508 = private unnamed_addr constant [7 x i8] c"resize\00" -@.str509 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str510 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str511 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str512 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str513 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str514 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str515 = private unnamed_addr constant [10 x i8] c"arg_count\00" -@.str516 = private unnamed_addr constant [4 x i8] c"arg\00" -@.str517 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str518 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str519 = private unnamed_addr constant [12 x i8] c"file_stdout\00" -@.str520 = private unnamed_addr constant [4 x i8] c"run\00" -@.str521 = private unnamed_addr constant [7 x i8] c"getenv\00" -@.str522 = private unnamed_addr constant [3 x i8] c" \00" -@.str523 = private unnamed_addr constant [4 x i8] c" = \00" -@.str524 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str525 = private unnamed_addr constant [7 x i8] c"resize\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 [23 x i8] c"call ptr @realloc(ptr \00" -@.str529 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str530 = private unnamed_addr constant [2 x i8] c")\00" -@.str531 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str532 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str533 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" -@.str534 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str535 = private unnamed_addr constant [2 x i8] c")\00" -@.str536 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str537 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str538 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str539 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str540 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str541 = private unnamed_addr constant [7 x i8] c"@fread\00" -@.str542 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str543 = private unnamed_addr constant [8 x i8] c"@fwrite\00" -@.str544 = private unnamed_addr constant [10 x i8] c"call i64 \00" -@.str545 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str546 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str547 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str548 = private unnamed_addr constant [2 x i8] c")\00" -@.str549 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str550 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str551 = private unnamed_addr constant [4 x i8] c"int\00" -@.str552 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str553 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str554 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str555 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" -@.str556 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str557 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str558 = private unnamed_addr constant [2 x i8] c")\00" -@.str559 = private unnamed_addr constant [4 x i8] c"int\00" -@.str560 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str561 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" -@.str562 = private unnamed_addr constant [2 x i8] c")\00" -@.str563 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str564 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str565 = private unnamed_addr constant [4 x i8] c"int\00" -@.str566 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str567 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" -@.str568 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str569 = private unnamed_addr constant [2 x i8] c"0\00" -@.str570 = private unnamed_addr constant [5 x i8] c"void\00" -@.str571 = private unnamed_addr constant [10 x i8] c"arg_count\00" -@.str572 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" -@.str573 = private unnamed_addr constant [4 x i8] c"int\00" -@.str574 = private unnamed_addr constant [4 x i8] c"arg\00" -@.str575 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" -@.str576 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" -@.str577 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str578 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str579 = private unnamed_addr constant [4 x i8] c"str\00" -@.str580 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str581 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" -@.str582 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str583 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" -@.str584 = private unnamed_addr constant [2 x i8] c"0\00" -@.str585 = private unnamed_addr constant [5 x i8] c"void\00" -@.str586 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str587 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" -@.str588 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str589 = private unnamed_addr constant [12 x i8] c"file_stdout\00" -@.str590 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stdoutp\00" +@.str504 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" +@.str505 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str506 = private unnamed_addr constant [3 x i8] c" \00" +@.str507 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str508 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str509 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str510 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str511 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str512 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str513 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str514 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str515 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str516 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str517 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str518 = private unnamed_addr constant [10 x i8] c"arg_count\00" +@.str519 = private unnamed_addr constant [4 x i8] c"arg\00" +@.str520 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str521 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str522 = private unnamed_addr constant [12 x i8] c"file_stdout\00" +@.str523 = private unnamed_addr constant [4 x i8] c"run\00" +@.str524 = private unnamed_addr constant [7 x i8] c"getenv\00" +@.str525 = private unnamed_addr constant [3 x i8] c" \00" +@.str526 = private unnamed_addr constant [4 x i8] c" = \00" +@.str527 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str528 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str529 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str530 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str531 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str532 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str533 = private unnamed_addr constant [2 x i8] c")\00" +@.str534 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str535 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str536 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" +@.str537 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str538 = private unnamed_addr constant [2 x i8] c")\00" +@.str539 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str540 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str541 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str542 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str543 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str544 = private unnamed_addr constant [7 x i8] c"@fread\00" +@.str545 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str546 = private unnamed_addr constant [8 x i8] c"@fwrite\00" +@.str547 = private unnamed_addr constant [10 x i8] c"call i64 \00" +@.str548 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str549 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str550 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str551 = private unnamed_addr constant [2 x i8] c")\00" +@.str552 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str553 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str554 = private unnamed_addr constant [4 x i8] c"int\00" +@.str555 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str556 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str557 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str558 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" +@.str559 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str560 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str561 = private unnamed_addr constant [2 x i8] c")\00" +@.str562 = private unnamed_addr constant [4 x i8] c"int\00" +@.str563 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str564 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" +@.str565 = private unnamed_addr constant [2 x i8] c")\00" +@.str566 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str567 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str568 = private unnamed_addr constant [4 x i8] c"int\00" +@.str569 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str570 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" +@.str571 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str572 = private unnamed_addr constant [2 x i8] c"0\00" +@.str573 = private unnamed_addr constant [5 x i8] c"void\00" +@.str574 = private unnamed_addr constant [10 x i8] c"arg_count\00" +@.str575 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" +@.str576 = private unnamed_addr constant [4 x i8] c"int\00" +@.str577 = private unnamed_addr constant [4 x i8] c"arg\00" +@.str578 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" +@.str579 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" +@.str580 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str581 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str582 = private unnamed_addr constant [4 x i8] c"str\00" +@.str583 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str584 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" +@.str585 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str586 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" +@.str587 = private unnamed_addr constant [2 x i8] c"0\00" +@.str588 = private unnamed_addr constant [5 x i8] c"void\00" +@.str589 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str590 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" @.str591 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str592 = private unnamed_addr constant [4 x i8] c"run\00" -@.str593 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" -@.str594 = private unnamed_addr constant [2 x i8] c")\00" -@.str595 = private unnamed_addr constant [4 x i8] c"int\00" -@.str596 = private unnamed_addr constant [7 x i8] c"getenv\00" -@.str597 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" -@.str598 = private unnamed_addr constant [2 x i8] c")\00" -@.str599 = private unnamed_addr constant [4 x i8] c"str\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 [5 x i8] c"free\00" -@.str603 = private unnamed_addr constant [5 x i8] c"fill\00" -@.str604 = private unnamed_addr constant [7 x i8] c"offset\00" -@.str605 = private unnamed_addr constant [10 x i8] c"read_char\00" -@.str606 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str607 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str608 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str609 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str610 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str611 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str612 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str613 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str614 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str615 = private unnamed_addr constant [5 x i8] c"free\00" -@.str616 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" -@.str617 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str618 = private unnamed_addr constant [2 x i8] c"0\00" -@.str619 = private unnamed_addr constant [5 x i8] c"void\00" -@.str620 = private unnamed_addr constant [5 x i8] c"fill\00" -@.str621 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str622 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str623 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" -@.str624 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str625 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str626 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str627 = private unnamed_addr constant [2 x i8] c"0\00" -@.str628 = private unnamed_addr constant [5 x i8] c"void\00" -@.str629 = private unnamed_addr constant [7 x i8] c"offset\00" -@.str630 = private unnamed_addr constant [3 x i8] c" \00" -@.str631 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" -@.str632 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str633 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str634 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str635 = private unnamed_addr constant [10 x i8] c"read_char\00" -@.str636 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" -@.str637 = private unnamed_addr constant [4 x i8] c"int\00" -@.str638 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str639 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str640 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str641 = private unnamed_addr constant [4 x i8] c"int\00" -@.str642 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str643 = private unnamed_addr constant [2 x i8] c"1\00" -@.str644 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str645 = private unnamed_addr constant [2 x i8] c"0\00" -@.str646 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str647 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str648 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" -@.str649 = private unnamed_addr constant [4 x i8] c"str\00" -@.str650 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str651 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" -@.str652 = private unnamed_addr constant [4 x i8] c"int\00" -@.str653 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str654 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" -@.str655 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str656 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str657 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" -@.str658 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str659 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str660 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str661 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str662 = private unnamed_addr constant [2 x i8] c"0\00" -@.str663 = private unnamed_addr constant [5 x i8] c"void\00" -@.str664 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str665 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" -@.str666 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str667 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str668 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str669 = private unnamed_addr constant [2 x i8] c"0\00" -@.str670 = private unnamed_addr constant [5 x i8] c"void\00" -@.str671 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str672 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" -@.str673 = private unnamed_addr constant [2 x i8] c"0\00" -@.str674 = private unnamed_addr constant [5 x i8] c"void\00" -@.str675 = private unnamed_addr constant [2 x i8] c"0\00" -@.str676 = private unnamed_addr constant [5 x i8] c"void\00" -@.str677 = private unnamed_addr constant [4 x i8] c"min\00" -@.str678 = private unnamed_addr constant [4 x i8] c"max\00" -@.str679 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str680 = private unnamed_addr constant [6 x i8] c"clamp\00" -@.str681 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str682 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str683 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str684 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str685 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str686 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str687 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str688 = private unnamed_addr constant [4 x i8] c"int\00" -@.str689 = private unnamed_addr constant [4 x i8] c"min\00" -@.str690 = private unnamed_addr constant [4 x i8] c"max\00" -@.str691 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str592 = private unnamed_addr constant [12 x i8] c"file_stdout\00" +@.str593 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stdoutp\00" +@.str594 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str595 = private unnamed_addr constant [4 x i8] c"run\00" +@.str596 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" +@.str597 = private unnamed_addr constant [2 x i8] c")\00" +@.str598 = private unnamed_addr constant [4 x i8] c"int\00" +@.str599 = private unnamed_addr constant [7 x i8] c"getenv\00" +@.str600 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" +@.str601 = private unnamed_addr constant [2 x i8] c")\00" +@.str602 = private unnamed_addr constant [4 x i8] c"str\00" +@.str603 = private unnamed_addr constant [2 x i8] c"0\00" +@.str604 = private unnamed_addr constant [5 x i8] c"void\00" +@.str605 = private unnamed_addr constant [5 x i8] c"free\00" +@.str606 = private unnamed_addr constant [5 x i8] c"fill\00" +@.str607 = private unnamed_addr constant [7 x i8] c"offset\00" +@.str608 = private unnamed_addr constant [10 x i8] c"read_char\00" +@.str609 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str610 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str611 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str612 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str613 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str614 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str615 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str616 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str617 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str618 = private unnamed_addr constant [5 x i8] c"free\00" +@.str619 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" +@.str620 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str621 = private unnamed_addr constant [2 x i8] c"0\00" +@.str622 = private unnamed_addr constant [5 x i8] c"void\00" +@.str623 = private unnamed_addr constant [5 x i8] c"fill\00" +@.str624 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str625 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str626 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" +@.str627 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str628 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str629 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str630 = private unnamed_addr constant [2 x i8] c"0\00" +@.str631 = private unnamed_addr constant [5 x i8] c"void\00" +@.str632 = private unnamed_addr constant [7 x i8] c"offset\00" +@.str633 = private unnamed_addr constant [3 x i8] c" \00" +@.str634 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" +@.str635 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str636 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str637 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str638 = private unnamed_addr constant [10 x i8] c"read_char\00" +@.str639 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" +@.str640 = private unnamed_addr constant [4 x i8] c"int\00" +@.str641 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str642 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str643 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str644 = private unnamed_addr constant [4 x i8] c"int\00" +@.str645 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str646 = private unnamed_addr constant [2 x i8] c"1\00" +@.str647 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str648 = private unnamed_addr constant [2 x i8] c"0\00" +@.str649 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str650 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str651 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" +@.str652 = private unnamed_addr constant [4 x i8] c"str\00" +@.str653 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str654 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" +@.str655 = private unnamed_addr constant [4 x i8] c"int\00" +@.str656 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str657 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" +@.str658 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str659 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str660 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" +@.str661 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str662 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str663 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str664 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str665 = private unnamed_addr constant [2 x i8] c"0\00" +@.str666 = private unnamed_addr constant [5 x i8] c"void\00" +@.str667 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str668 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" +@.str669 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str670 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str671 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str672 = private unnamed_addr constant [2 x i8] c"0\00" +@.str673 = private unnamed_addr constant [5 x i8] c"void\00" +@.str674 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str675 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" +@.str676 = private unnamed_addr constant [2 x i8] c"0\00" +@.str677 = private unnamed_addr constant [5 x i8] c"void\00" +@.str678 = private unnamed_addr constant [2 x i8] c"0\00" +@.str679 = private unnamed_addr constant [5 x i8] c"void\00" +@.str680 = private unnamed_addr constant [4 x i8] c"min\00" +@.str681 = private unnamed_addr constant [4 x i8] c"max\00" +@.str682 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str683 = private unnamed_addr constant [6 x i8] c"clamp\00" +@.str684 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str685 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str686 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str687 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str688 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str689 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str690 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str691 = private unnamed_addr constant [4 x i8] c"min\00" @.str692 = private unnamed_addr constant [4 x i8] c"max\00" -@.str693 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str694 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str695 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str696 = private unnamed_addr constant [3 x i8] c", \00" -@.str697 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str698 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str699 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str700 = private unnamed_addr constant [4 x i8] c"int\00" -@.str701 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str702 = private unnamed_addr constant [3 x i8] c", \00" -@.str703 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str704 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str693 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str694 = private unnamed_addr constant [4 x i8] c"max\00" +@.str695 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str696 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str697 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str698 = private unnamed_addr constant [3 x i8] c", \00" +@.str699 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str700 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str701 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str702 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str703 = private unnamed_addr constant [3 x i8] c", \00" +@.str704 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str705 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str706 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" -@.str707 = private unnamed_addr constant [3 x i8] c", \00" -@.str708 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str709 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str706 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str707 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str708 = private unnamed_addr constant [3 x i8] c", \00" +@.str709 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str710 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str711 = private unnamed_addr constant [4 x i8] c"int\00" -@.str712 = private unnamed_addr constant [6 x i8] c"White\00" -@.str713 = private unnamed_addr constant [5 x i8] c"Snow\00" -@.str714 = private unnamed_addr constant [6 x i8] c"Ivory\00" -@.str715 = private unnamed_addr constant [14 x i8] c"EggShellWhite\00" -@.str716 = private unnamed_addr constant [12 x i8] c"FloralWhite\00" -@.str717 = private unnamed_addr constant [9 x i8] c"SeaShell\00" -@.str718 = private unnamed_addr constant [6 x i8] c"Linen\00" -@.str719 = private unnamed_addr constant [13 x i8] c"AntiqueWhite\00" -@.str720 = private unnamed_addr constant [8 x i8] c"OldLace\00" -@.str721 = private unnamed_addr constant [6 x i8] c"Beige\00" -@.str722 = private unnamed_addr constant [6 x i8] c"Cream\00" -@.str723 = private unnamed_addr constant [9 x i8] c"Honeydew\00" -@.str724 = private unnamed_addr constant [10 x i8] c"MintCream\00" -@.str725 = private unnamed_addr constant [6 x i8] c"Azure\00" -@.str726 = private unnamed_addr constant [10 x i8] c"AliceBlue\00" -@.str727 = private unnamed_addr constant [11 x i8] c"GhostWhite\00" -@.str728 = private unnamed_addr constant [11 x i8] c"WhiteSmoke\00" -@.str729 = private unnamed_addr constant [9 x i8] c"Lavender\00" -@.str730 = private unnamed_addr constant [5 x i8] c"Bone\00" -@.str731 = private unnamed_addr constant [10 x i8] c"Parchment\00" -@.str732 = private unnamed_addr constant [10 x i8] c"Gainsboro\00" -@.str733 = private unnamed_addr constant [10 x i8] c"LightGray\00" -@.str734 = private unnamed_addr constant [7 x i8] c"Silver\00" -@.str735 = private unnamed_addr constant [4 x i8] c"Ash\00" -@.str736 = private unnamed_addr constant [9 x i8] c"DarkGray\00" -@.str737 = private unnamed_addr constant [5 x i8] c"Gray\00" -@.str738 = private unnamed_addr constant [8 x i8] c"DimGray\00" -@.str739 = private unnamed_addr constant [7 x i8] c"Nickel\00" -@.str740 = private unnamed_addr constant [6 x i8] c"Slate\00" -@.str741 = private unnamed_addr constant [10 x i8] c"SlateGray\00" -@.str742 = private unnamed_addr constant [15 x i8] c"LightSlateGray\00" -@.str743 = private unnamed_addr constant [9 x i8] c"Gunmetal\00" -@.str744 = private unnamed_addr constant [9 x i8] c"Charcoal\00" -@.str745 = private unnamed_addr constant [9 x i8] c"Graphite\00" -@.str746 = private unnamed_addr constant [5 x i8] c"Onyx\00" -@.str747 = private unnamed_addr constant [4 x i8] c"Jet\00" -@.str748 = private unnamed_addr constant [6 x i8] c"Black\00" -@.str749 = private unnamed_addr constant [11 x i8] c"EerieBlack\00" -@.str750 = private unnamed_addr constant [12 x i8] c"RaisinBlack\00" -@.str751 = private unnamed_addr constant [6 x i8] c"Ebony\00" -@.str752 = private unnamed_addr constant [4 x i8] c"Red\00" -@.str753 = private unnamed_addr constant [8 x i8] c"Crimson\00" -@.str754 = private unnamed_addr constant [8 x i8] c"Scarlet\00" -@.str755 = private unnamed_addr constant [10 x i8] c"Vermilion\00" -@.str756 = private unnamed_addr constant [10 x i8] c"FireBrick\00" -@.str757 = private unnamed_addr constant [9 x i8] c"Cinnabar\00" -@.str758 = private unnamed_addr constant [8 x i8] c"DarkRed\00" -@.str759 = private unnamed_addr constant [7 x i8] c"Maroon\00" -@.str760 = private unnamed_addr constant [5 x i8] c"Ruby\00" -@.str761 = private unnamed_addr constant [9 x i8] c"Cardinal\00" -@.str762 = private unnamed_addr constant [10 x i8] c"IndianRed\00" -@.str763 = private unnamed_addr constant [5 x i8] c"Rust\00" -@.str764 = private unnamed_addr constant [8 x i8] c"Sangria\00" -@.str765 = private unnamed_addr constant [8 x i8] c"Redwood\00" -@.str766 = private unnamed_addr constant [7 x i8] c"Cerise\00" -@.str767 = private unnamed_addr constant [9 x i8] c"Amaranth\00" -@.str768 = private unnamed_addr constant [8 x i8] c"Carmine\00" -@.str769 = private unnamed_addr constant [9 x i8] c"Chestnut\00" -@.str770 = private unnamed_addr constant [6 x i8] c"Brick\00" -@.str771 = private unnamed_addr constant [11 x i8] c"TerraCotta\00" -@.str772 = private unnamed_addr constant [5 x i8] c"Pink\00" -@.str773 = private unnamed_addr constant [10 x i8] c"LightPink\00" -@.str774 = private unnamed_addr constant [8 x i8] c"HotPink\00" -@.str775 = private unnamed_addr constant [9 x i8] c"DeepPink\00" -@.str776 = private unnamed_addr constant [14 x i8] c"PaleVioletRed\00" -@.str777 = private unnamed_addr constant [5 x i8] c"Rose\00" -@.str778 = private unnamed_addr constant [6 x i8] c"Blush\00" -@.str779 = private unnamed_addr constant [7 x i8] c"Salmon\00" -@.str780 = private unnamed_addr constant [12 x i8] c"LightSalmon\00" -@.str781 = private unnamed_addr constant [11 x i8] c"DarkSalmon\00" -@.str782 = private unnamed_addr constant [6 x i8] c"Coral\00" -@.str783 = private unnamed_addr constant [11 x i8] c"Watermelon\00" -@.str784 = private unnamed_addr constant [9 x i8] c"Flamingo\00" -@.str785 = private unnamed_addr constant [10 x i8] c"Bubblegum\00" -@.str786 = private unnamed_addr constant [8 x i8] c"Fuchsia\00" -@.str787 = private unnamed_addr constant [8 x i8] c"Magenta\00" -@.str788 = private unnamed_addr constant [6 x i8] c"Mauve\00" -@.str789 = private unnamed_addr constant [5 x i8] c"Puce\00" -@.str790 = private unnamed_addr constant [8 x i8] c"Thistle\00" -@.str791 = private unnamed_addr constant [7 x i8] c"Orchid\00" -@.str792 = private unnamed_addr constant [7 x i8] c"Orange\00" -@.str793 = private unnamed_addr constant [11 x i8] c"DarkOrange\00" -@.str794 = private unnamed_addr constant [10 x i8] c"Tangerine\00" -@.str795 = private unnamed_addr constant [8 x i8] c"Pumpkin\00" -@.str796 = private unnamed_addr constant [8 x i8] c"Apricot\00" -@.str797 = private unnamed_addr constant [6 x i8] c"Peach\00" -@.str798 = private unnamed_addr constant [11 x i8] c"Cantaloupe\00" -@.str799 = private unnamed_addr constant [6 x i8] c"Amber\00" -@.str800 = private unnamed_addr constant [7 x i8] c"Bronze\00" -@.str801 = private unnamed_addr constant [7 x i8] c"Copper\00" -@.str802 = private unnamed_addr constant [9 x i8] c"Marigold\00" -@.str803 = private unnamed_addr constant [7 x i8] c"Carrot\00" -@.str804 = private unnamed_addr constant [10 x i8] c"Persimmon\00" -@.str805 = private unnamed_addr constant [7 x i8] c"Papaya\00" -@.str806 = private unnamed_addr constant [7 x i8] c"Sunset\00" -@.str807 = private unnamed_addr constant [7 x i8] c"Yellow\00" -@.str808 = private unnamed_addr constant [12 x i8] c"LightYellow\00" -@.str809 = private unnamed_addr constant [5 x i8] c"Gold\00" -@.str810 = private unnamed_addr constant [10 x i8] c"Goldenrod\00" -@.str811 = private unnamed_addr constant [6 x i8] c"Lemon\00" -@.str812 = private unnamed_addr constant [7 x i8] c"Canary\00" -@.str813 = private unnamed_addr constant [8 x i8] c"Mustard\00" -@.str814 = private unnamed_addr constant [5 x i8] c"Flax\00" -@.str815 = private unnamed_addr constant [6 x i8] c"Wheat\00" -@.str816 = private unnamed_addr constant [5 x i8] c"Corn\00" -@.str817 = private unnamed_addr constant [10 x i8] c"Dandelion\00" -@.str818 = private unnamed_addr constant [8 x i8] c"Saffron\00" -@.str819 = private unnamed_addr constant [6 x i8] c"Khaki\00" -@.str820 = private unnamed_addr constant [10 x i8] c"DarkKhaki\00" -@.str821 = private unnamed_addr constant [6 x i8] c"Straw\00" -@.str822 = private unnamed_addr constant [6 x i8] c"Brown\00" -@.str823 = private unnamed_addr constant [12 x i8] c"SaddleBrown\00" -@.str824 = private unnamed_addr constant [7 x i8] c"Sienna\00" -@.str825 = private unnamed_addr constant [10 x i8] c"Chocolate\00" -@.str826 = private unnamed_addr constant [5 x i8] c"Peru\00" -@.str827 = private unnamed_addr constant [4 x i8] c"Tan\00" -@.str828 = private unnamed_addr constant [10 x i8] c"BurlyWood\00" -@.str829 = private unnamed_addr constant [5 x i8] c"Sand\00" -@.str830 = private unnamed_addr constant [7 x i8] c"Coffee\00" -@.str831 = private unnamed_addr constant [9 x i8] c"Espresso\00" -@.str832 = private unnamed_addr constant [9 x i8] c"Mahogany\00" -@.str833 = private unnamed_addr constant [7 x i8] c"Walnut\00" -@.str834 = private unnamed_addr constant [6 x i8] c"Umber\00" -@.str835 = private unnamed_addr constant [6 x i8] c"Sepia\00" -@.str836 = private unnamed_addr constant [6 x i8] c"Taupe\00" -@.str837 = private unnamed_addr constant [5 x i8] c"Fawn\00" -@.str838 = private unnamed_addr constant [8 x i8] c"Caramel\00" -@.str839 = private unnamed_addr constant [6 x i8] c"Cocoa\00" -@.str840 = private unnamed_addr constant [6 x i8] c"Hazel\00" -@.str841 = private unnamed_addr constant [6 x i8] c"Wenge\00" -@.str842 = private unnamed_addr constant [6 x i8] c"Green\00" -@.str843 = private unnamed_addr constant [5 x i8] c"Lime\00" -@.str844 = private unnamed_addr constant [10 x i8] c"LimeGreen\00" -@.str845 = private unnamed_addr constant [10 x i8] c"LawnGreen\00" -@.str846 = private unnamed_addr constant [11 x i8] c"Chartreuse\00" -@.str847 = private unnamed_addr constant [12 x i8] c"GreenYellow\00" -@.str848 = private unnamed_addr constant [12 x i8] c"SpringGreen\00" -@.str849 = private unnamed_addr constant [10 x i8] c"MintGreen\00" -@.str850 = private unnamed_addr constant [9 x i8] c"SeaGreen\00" -@.str851 = private unnamed_addr constant [15 x i8] c"MediumSeaGreen\00" -@.str852 = private unnamed_addr constant [12 x i8] c"ForestGreen\00" -@.str853 = private unnamed_addr constant [10 x i8] c"DarkGreen\00" -@.str854 = private unnamed_addr constant [10 x i8] c"OliveDrab\00" -@.str855 = private unnamed_addr constant [6 x i8] c"Olive\00" -@.str856 = private unnamed_addr constant [5 x i8] c"Moss\00" -@.str857 = private unnamed_addr constant [5 x i8] c"Fern\00" -@.str858 = private unnamed_addr constant [8 x i8] c"Emerald\00" -@.str859 = private unnamed_addr constant [5 x i8] c"Jade\00" -@.str860 = private unnamed_addr constant [10 x i8] c"Malachite\00" -@.str861 = private unnamed_addr constant [9 x i8] c"Shamrock\00" -@.str862 = private unnamed_addr constant [10 x i8] c"Pistachio\00" -@.str863 = private unnamed_addr constant [8 x i8] c"Avocado\00" -@.str864 = private unnamed_addr constant [5 x i8] c"Pine\00" -@.str865 = private unnamed_addr constant [5 x i8] c"Sage\00" -@.str866 = private unnamed_addr constant [6 x i8] c"Kelly\00" -@.str867 = private unnamed_addr constant [7 x i8] c"Hunter\00" -@.str868 = private unnamed_addr constant [6 x i8] c"Basil\00" -@.str869 = private unnamed_addr constant [7 x i8] c"Clover\00" -@.str870 = private unnamed_addr constant [8 x i8] c"Juniper\00" -@.str871 = private unnamed_addr constant [5 x i8] c"Neon\00" -@.str872 = private unnamed_addr constant [5 x i8] c"Cyan\00" -@.str873 = private unnamed_addr constant [5 x i8] c"Aqua\00" -@.str874 = private unnamed_addr constant [10 x i8] c"LightCyan\00" -@.str875 = private unnamed_addr constant [14 x i8] c"PaleTurquoise\00" -@.str876 = private unnamed_addr constant [11 x i8] c"Aquamarine\00" -@.str877 = private unnamed_addr constant [10 x i8] c"Turquoise\00" -@.str878 = private unnamed_addr constant [16 x i8] c"MediumTurquoise\00" -@.str879 = private unnamed_addr constant [14 x i8] c"DarkTurquoise\00" -@.str880 = private unnamed_addr constant [5 x i8] c"Teal\00" -@.str881 = private unnamed_addr constant [9 x i8] c"DarkCyan\00" -@.str882 = private unnamed_addr constant [10 x i8] c"CadetBlue\00" -@.str883 = private unnamed_addr constant [7 x i8] c"Lagoon\00" -@.str884 = private unnamed_addr constant [8 x i8] c"Seafoam\00" -@.str885 = private unnamed_addr constant [9 x i8] c"Cerulean\00" -@.str886 = private unnamed_addr constant [13 x i8] c"SkyBlueLight\00" -@.str887 = private unnamed_addr constant [6 x i8] c"Robin\00" -@.str888 = private unnamed_addr constant [10 x i8] c"Verdigris\00" -@.str889 = private unnamed_addr constant [8 x i8] c"Celadon\00" -@.str890 = private unnamed_addr constant [5 x i8] c"Blue\00" -@.str891 = private unnamed_addr constant [10 x i8] c"LightBlue\00" -@.str892 = private unnamed_addr constant [11 x i8] c"PowderBlue\00" -@.str893 = private unnamed_addr constant [8 x i8] c"SkyBlue\00" -@.str894 = private unnamed_addr constant [13 x i8] c"LightSkyBlue\00" -@.str895 = private unnamed_addr constant [12 x i8] c"DeepSkyBlue\00" -@.str896 = private unnamed_addr constant [11 x i8] c"DodgerBlue\00" -@.str897 = private unnamed_addr constant [15 x i8] c"CornflowerBlue\00" -@.str898 = private unnamed_addr constant [10 x i8] c"SteelBlue\00" -@.str899 = private unnamed_addr constant [10 x i8] c"RoyalBlue\00" -@.str900 = private unnamed_addr constant [11 x i8] c"MediumBlue\00" -@.str901 = private unnamed_addr constant [9 x i8] c"DarkBlue\00" -@.str902 = private unnamed_addr constant [5 x i8] c"Navy\00" -@.str903 = private unnamed_addr constant [13 x i8] c"MidnightBlue\00" -@.str904 = private unnamed_addr constant [7 x i8] c"Cobalt\00" -@.str905 = private unnamed_addr constant [9 x i8] c"Sapphire\00" -@.str906 = private unnamed_addr constant [6 x i8] c"Denim\00" -@.str907 = private unnamed_addr constant [7 x i8] c"Indigo\00" -@.str908 = private unnamed_addr constant [9 x i8] c"Prussian\00" -@.str909 = private unnamed_addr constant [12 x i8] c"Ultramarine\00" -@.str910 = private unnamed_addr constant [11 x i8] c"Periwinkle\00" -@.str911 = private unnamed_addr constant [5 x i8] c"Iris\00" -@.str912 = private unnamed_addr constant [9 x i8] c"Glaucous\00" -@.str913 = private unnamed_addr constant [7 x i8] c"Zaffre\00" -@.str914 = private unnamed_addr constant [6 x i8] c"Berry\00" -@.str915 = private unnamed_addr constant [7 x i8] c"Purple\00" -@.str916 = private unnamed_addr constant [7 x i8] c"Violet\00" -@.str917 = private unnamed_addr constant [11 x i8] c"DarkViolet\00" -@.str918 = private unnamed_addr constant [11 x i8] c"BlueViolet\00" -@.str919 = private unnamed_addr constant [13 x i8] c"MediumPurple\00" -@.str920 = private unnamed_addr constant [9 x i8] c"Amethyst\00" -@.str921 = private unnamed_addr constant [5 x i8] c"Plum\00" -@.str922 = private unnamed_addr constant [9 x i8] c"Eggplant\00" -@.str923 = private unnamed_addr constant [6 x i8] c"Grape\00" -@.str924 = private unnamed_addr constant [5 x i8] c"Wine\00" -@.str925 = private unnamed_addr constant [9 x i8] c"Mulberry\00" -@.str926 = private unnamed_addr constant [6 x i8] c"Lilac\00" -@.str927 = private unnamed_addr constant [9 x i8] c"Wisteria\00" -@.str928 = private unnamed_addr constant [11 x i8] c"Heliotrope\00" -@.str929 = private unnamed_addr constant [10 x i8] c"Byzantium\00" -@.str930 = private unnamed_addr constant [7 x i8] c"Tyrian\00" -@.str931 = private unnamed_addr constant [14 x i8] c"RebeccaPurple\00" -@.str932 = private unnamed_addr constant [8 x i8] c"Orchid2\00" -@.str933 = private unnamed_addr constant [15 x i8] c"getelementptr \00" -@.str934 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" -@.str935 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" -@.str936 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str937 = private unnamed_addr constant [27 x i8] c"unknown record type in new\00" -@.str938 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str939 = private unnamed_addr constant [2 x i8] c")\00" -@.str940 = private unnamed_addr constant [3 x i8] c" \00" -@.str941 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str942 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str943 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str944 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str945 = private unnamed_addr constant [2 x i8] c"0\00" -@.str946 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str947 = private unnamed_addr constant [5 x i8] c"null\00" -@.str948 = private unnamed_addr constant [9 x i8] c" store \00" -@.str949 = private unnamed_addr constant [2 x i8] c" \00" -@.str950 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str951 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str952 = private unnamed_addr constant [8 x i8] c"%LSlice\00" -@.str953 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str954 = private unnamed_addr constant [2 x i8] c")\00" -@.str955 = private unnamed_addr constant [3 x i8] c" \00" -@.str956 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str957 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" -@.str958 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" -@.str959 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str960 = private unnamed_addr constant [3 x i8] c" \00" -@.str961 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str962 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" -@.str963 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str964 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str965 = private unnamed_addr constant [3 x i8] c" \00" -@.str966 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str967 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" -@.str968 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str969 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str970 = private unnamed_addr constant [3 x i8] c" \00" -@.str971 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str972 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str973 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str974 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str975 = private unnamed_addr constant [4 x i8] c"int\00" -@.str976 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" -@.str977 = private unnamed_addr constant [2 x i8] c")\00" -@.str978 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str979 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str980 = private unnamed_addr constant [4 x i8] c"int\00" -@.str981 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str982 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str983 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" -@.str984 = private unnamed_addr constant [3 x i8] c", \00" -@.str985 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str986 = private unnamed_addr constant [4 x i8] c"put\00" -@.str987 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str988 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str989 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str990 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str991 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str992 = private unnamed_addr constant [9 x i8] c"mul i32 \00" -@.str993 = private unnamed_addr constant [4 x i8] c", 2\00" -@.str994 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str995 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str996 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str997 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" -@.str998 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str999 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1000 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str1001 = private unnamed_addr constant [3 x i8] c", \00" -@.str1002 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str1003 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" -@.str1004 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str1005 = private unnamed_addr constant [2 x i8] c")\00" -@.str1006 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1007 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1008 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1009 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1010 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1011 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1012 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1013 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1014 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1015 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str1016 = private unnamed_addr constant [3 x i8] c" \00" -@.str1017 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str1018 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1019 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1020 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1021 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1022 = private unnamed_addr constant [2 x i8] c" \00" -@.str1023 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1024 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1025 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1026 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1027 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1028 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1029 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1030 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1031 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1032 = private unnamed_addr constant [6 x i8] c"load \00" -@.str1033 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1034 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1035 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1036 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1037 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1038 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1039 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1040 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1041 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1042 = private unnamed_addr constant [3 x i8] c"sc\00" -@.str1043 = private unnamed_addr constant [6 x i8] c"scend\00" -@.str1044 = private unnamed_addr constant [4 x i8] c"and\00" -@.str1045 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1046 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1047 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1048 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1049 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1050 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1051 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1052 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1053 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1054 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1055 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1056 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1057 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1058 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1059 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1060 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1061 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1062 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1063 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1064 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1065 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1066 = private unnamed_addr constant [2 x i8] c"<\00" -@.str1067 = private unnamed_addr constant [4 x i8] c"slt\00" -@.str1068 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str1069 = private unnamed_addr constant [4 x i8] c"sle\00" -@.str1070 = private unnamed_addr constant [2 x i8] c">\00" -@.str1071 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str1072 = private unnamed_addr constant [3 x i8] c">=\00" -@.str1073 = private unnamed_addr constant [4 x i8] c"sge\00" -@.str1074 = private unnamed_addr constant [3 x i8] c"==\00" -@.str1075 = private unnamed_addr constant [3 x i8] c"eq\00" -@.str1076 = private unnamed_addr constant [3 x i8] c"ne\00" -@.str1077 = private unnamed_addr constant [2 x i8] c"<\00" -@.str1078 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str1079 = private unnamed_addr constant [2 x i8] c">\00" -@.str1080 = private unnamed_addr constant [3 x i8] c">=\00" -@.str1081 = private unnamed_addr constant [3 x i8] c"==\00" -@.str1082 = private unnamed_addr constant [3 x i8] c"!=\00" -@.str1083 = private unnamed_addr constant [2 x i8] c"+\00" -@.str1084 = private unnamed_addr constant [4 x i8] c"add\00" -@.str1085 = private unnamed_addr constant [2 x i8] c"-\00" -@.str1086 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str1087 = private unnamed_addr constant [2 x i8] c"*\00" -@.str1088 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str1089 = private unnamed_addr constant [2 x i8] c"/\00" -@.str1090 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str1091 = private unnamed_addr constant [2 x i8] c"&\00" -@.str1092 = private unnamed_addr constant [4 x i8] c"and\00" -@.str1093 = private unnamed_addr constant [2 x i8] c"|\00" -@.str1094 = private unnamed_addr constant [3 x i8] c"or\00" -@.str1095 = private unnamed_addr constant [2 x i8] c"^\00" -@.str1096 = private unnamed_addr constant [4 x i8] c"xor\00" -@.str1097 = private unnamed_addr constant [3 x i8] c"<<\00" -@.str1098 = private unnamed_addr constant [4 x i8] c"shl\00" -@.str1099 = private unnamed_addr constant [3 x i8] c">>\00" -@.str1100 = private unnamed_addr constant [5 x i8] c"lshr\00" -@.str1101 = private unnamed_addr constant [5 x i8] c"srem\00" -@.str1102 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1103 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str1104 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str1105 = private unnamed_addr constant [2 x i8] c"+\00" -@.str1106 = private unnamed_addr constant [29 x i8] c"call ptr @fn_str_concat(ptr \00" -@.str1107 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str711 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str712 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str713 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str714 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str715 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str716 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str717 = private unnamed_addr constant [3 x i8] c", \00" +@.str718 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" +@.str719 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str720 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str721 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str722 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str723 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str724 = private unnamed_addr constant [9 x i8] c"shl i64 \00" +@.str725 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str726 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str727 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str728 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str729 = private unnamed_addr constant [3 x i8] c", \00" +@.str730 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str731 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str732 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str733 = private unnamed_addr constant [3 x i8] c", \00" +@.str734 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str735 = private unnamed_addr constant [3 x i8] c", \00" +@.str736 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str737 = private unnamed_addr constant [3 x i8] c", \00" +@.str738 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str739 = private unnamed_addr constant [3 x i8] c", \00" +@.str740 = private unnamed_addr constant [4 x i8] c"min\00" +@.str741 = private unnamed_addr constant [4 x i8] c"max\00" +@.str742 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str743 = private unnamed_addr constant [6 x i8] c"clamp\00" +@.str744 = private unnamed_addr constant [5 x i8] c"sign\00" +@.str745 = private unnamed_addr constant [6 x i8] c"floor\00" +@.str746 = private unnamed_addr constant [5 x i8] c"ceil\00" +@.str747 = private unnamed_addr constant [6 x i8] c"round\00" +@.str748 = private unnamed_addr constant [5 x i8] c"lerp\00" +@.str749 = private unnamed_addr constant [13 x i8] c"inverse_lerp\00" +@.str750 = private unnamed_addr constant [6 x i8] c"remap\00" +@.str751 = private unnamed_addr constant [5 x i8] c"sqrt\00" +@.str752 = private unnamed_addr constant [4 x i8] c"sin\00" +@.str753 = private unnamed_addr constant [4 x i8] c"cos\00" +@.str754 = private unnamed_addr constant [4 x i8] c"tan\00" +@.str755 = private unnamed_addr constant [6 x i8] c"hypot\00" +@.str756 = private unnamed_addr constant [6 x i8] c"atan2\00" +@.str757 = private unnamed_addr constant [5 x i8] c"asin\00" +@.str758 = private unnamed_addr constant [5 x i8] c"acos\00" +@.str759 = private unnamed_addr constant [11 x i8] c"deg_to_rad\00" +@.str760 = private unnamed_addr constant [11 x i8] c"rad_to_deg\00" +@.str761 = private unnamed_addr constant [7 x i8] c"posmod\00" +@.str762 = private unnamed_addr constant [5 x i8] c"wrap\00" +@.str763 = private unnamed_addr constant [10 x i8] c"ping_pong\00" +@.str764 = private unnamed_addr constant [8 x i8] c"snapped\00" +@.str765 = private unnamed_addr constant [12 x i8] c"move_toward\00" +@.str766 = private unnamed_addr constant [11 x i8] c"smoothstep\00" +@.str767 = private unnamed_addr constant [5 x i8] c"dist\00" +@.str768 = private unnamed_addr constant [6 x i8] c"dist2\00" +@.str769 = private unnamed_addr constant [4 x i8] c"min\00" +@.str770 = private unnamed_addr constant [4 x i8] c"max\00" +@.str771 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str772 = private unnamed_addr constant [6 x i8] c"clamp\00" +@.str773 = private unnamed_addr constant [5 x i8] c"sign\00" +@.str774 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str775 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str776 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str777 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str778 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str779 = private unnamed_addr constant [16 x i8] c", i32 -1, i32 0\00" +@.str780 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str781 = private unnamed_addr constant [14 x i8] c", i32 1, i32 \00" +@.str782 = private unnamed_addr constant [4 x i8] c"int\00" +@.str783 = private unnamed_addr constant [6 x i8] c"floor\00" +@.str784 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str785 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str786 = private unnamed_addr constant [4 x i8] c"int\00" +@.str787 = private unnamed_addr constant [5 x i8] c"ceil\00" +@.str788 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str789 = private unnamed_addr constant [8 x i8] c", 65535\00" +@.str790 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str791 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str792 = private unnamed_addr constant [4 x i8] c"int\00" +@.str793 = private unnamed_addr constant [6 x i8] c"round\00" +@.str794 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str795 = private unnamed_addr constant [8 x i8] c", 32768\00" +@.str796 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str797 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str798 = private unnamed_addr constant [4 x i8] c"int\00" +@.str799 = private unnamed_addr constant [5 x i8] c"lerp\00" +@.str800 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str801 = private unnamed_addr constant [13 x i8] c"inverse_lerp\00" +@.str802 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str803 = private unnamed_addr constant [5 x i8] c"sqrt\00" +@.str804 = private unnamed_addr constant [26 x i8] c"call i32 @fn_fx_sqrt(i32 \00" +@.str805 = private unnamed_addr constant [2 x i8] c")\00" +@.str806 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str807 = private unnamed_addr constant [4 x i8] c"sin\00" +@.str808 = private unnamed_addr constant [25 x i8] c"call i32 @fn_fx_sin(i32 \00" +@.str809 = private unnamed_addr constant [2 x i8] c")\00" +@.str810 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str811 = private unnamed_addr constant [4 x i8] c"cos\00" +@.str812 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str813 = private unnamed_addr constant [9 x i8] c", 102944\00" +@.str814 = private unnamed_addr constant [25 x i8] c"call i32 @fn_fx_sin(i32 \00" +@.str815 = private unnamed_addr constant [2 x i8] c")\00" +@.str816 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str817 = private unnamed_addr constant [4 x i8] c"tan\00" +@.str818 = private unnamed_addr constant [25 x i8] c"call i32 @fn_fx_sin(i32 \00" +@.str819 = private unnamed_addr constant [2 x i8] c")\00" +@.str820 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str821 = private unnamed_addr constant [9 x i8] c", 102944\00" +@.str822 = private unnamed_addr constant [25 x i8] c"call i32 @fn_fx_sin(i32 \00" +@.str823 = private unnamed_addr constant [2 x i8] c")\00" +@.str824 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str825 = private unnamed_addr constant [6 x i8] c"atan2\00" +@.str826 = private unnamed_addr constant [27 x i8] c"call i32 @fn_fx_atan2(i32 \00" +@.str827 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str828 = private unnamed_addr constant [2 x i8] c")\00" +@.str829 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str830 = private unnamed_addr constant [5 x i8] c"asin\00" +@.str831 = private unnamed_addr constant [16 x i8] c"sub i32 65536, \00" +@.str832 = private unnamed_addr constant [26 x i8] c"call i32 @fn_fx_sqrt(i32 \00" +@.str833 = private unnamed_addr constant [2 x i8] c")\00" +@.str834 = private unnamed_addr constant [27 x i8] c"call i32 @fn_fx_atan2(i32 \00" +@.str835 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str836 = private unnamed_addr constant [2 x i8] c")\00" +@.str837 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str838 = private unnamed_addr constant [5 x i8] c"acos\00" +@.str839 = private unnamed_addr constant [16 x i8] c"sub i32 65536, \00" +@.str840 = private unnamed_addr constant [26 x i8] c"call i32 @fn_fx_sqrt(i32 \00" +@.str841 = private unnamed_addr constant [2 x i8] c")\00" +@.str842 = private unnamed_addr constant [27 x i8] c"call i32 @fn_fx_atan2(i32 \00" +@.str843 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str844 = private unnamed_addr constant [2 x i8] c")\00" +@.str845 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str846 = private unnamed_addr constant [6 x i8] c"hypot\00" +@.str847 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str848 = private unnamed_addr constant [3 x i8] c", \00" +@.str849 = private unnamed_addr constant [26 x i8] c"call i32 @fn_fx_sqrt(i32 \00" +@.str850 = private unnamed_addr constant [2 x i8] c")\00" +@.str851 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str852 = private unnamed_addr constant [6 x i8] c"dist2\00" +@.str853 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str854 = private unnamed_addr constant [3 x i8] c", \00" +@.str855 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str856 = private unnamed_addr constant [3 x i8] c", \00" +@.str857 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str858 = private unnamed_addr constant [3 x i8] c", \00" +@.str859 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str860 = private unnamed_addr constant [5 x i8] c"dist\00" +@.str861 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str862 = private unnamed_addr constant [3 x i8] c", \00" +@.str863 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str864 = private unnamed_addr constant [3 x i8] c", \00" +@.str865 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str866 = private unnamed_addr constant [3 x i8] c", \00" +@.str867 = private unnamed_addr constant [26 x i8] c"call i32 @fn_fx_sqrt(i32 \00" +@.str868 = private unnamed_addr constant [2 x i8] c")\00" +@.str869 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str870 = private unnamed_addr constant [11 x i8] c"deg_to_rad\00" +@.str871 = private unnamed_addr constant [5 x i8] c"1144\00" +@.str872 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str873 = private unnamed_addr constant [11 x i8] c"rad_to_deg\00" +@.str874 = private unnamed_addr constant [8 x i8] c"3754936\00" +@.str875 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str876 = private unnamed_addr constant [7 x i8] c"posmod\00" +@.str877 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str878 = private unnamed_addr constant [3 x i8] c", \00" +@.str879 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str880 = private unnamed_addr constant [3 x i8] c", \00" +@.str881 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str882 = private unnamed_addr constant [3 x i8] c", \00" +@.str883 = private unnamed_addr constant [4 x i8] c"int\00" +@.str884 = private unnamed_addr constant [5 x i8] c"wrap\00" +@.str885 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str886 = private unnamed_addr constant [3 x i8] c", \00" +@.str887 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str888 = private unnamed_addr constant [3 x i8] c", \00" +@.str889 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str890 = private unnamed_addr constant [3 x i8] c", \00" +@.str891 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str892 = private unnamed_addr constant [3 x i8] c", \00" +@.str893 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str894 = private unnamed_addr constant [3 x i8] c", \00" +@.str895 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str896 = private unnamed_addr constant [3 x i8] c", \00" +@.str897 = private unnamed_addr constant [4 x i8] c"int\00" +@.str898 = private unnamed_addr constant [10 x i8] c"ping_pong\00" +@.str899 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str900 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str901 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str902 = private unnamed_addr constant [3 x i8] c", \00" +@.str903 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str904 = private unnamed_addr constant [3 x i8] c", \00" +@.str905 = private unnamed_addr constant [10 x i8] c"srem i32 \00" +@.str906 = private unnamed_addr constant [3 x i8] c", \00" +@.str907 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str908 = private unnamed_addr constant [3 x i8] c", \00" +@.str909 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str910 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str911 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str912 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str913 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str914 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str915 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str916 = private unnamed_addr constant [3 x i8] c", \00" +@.str917 = private unnamed_addr constant [4 x i8] c"int\00" +@.str918 = private unnamed_addr constant [8 x i8] c"snapped\00" +@.str919 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str920 = private unnamed_addr constant [8 x i8] c", 32768\00" +@.str921 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str922 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str923 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str924 = private unnamed_addr constant [3 x i8] c", \00" +@.str925 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str926 = private unnamed_addr constant [12 x i8] c"move_toward\00" +@.str927 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str928 = private unnamed_addr constant [3 x i8] c", \00" +@.str929 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str930 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str931 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str932 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str933 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str934 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str935 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str936 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str937 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str938 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str939 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str940 = private unnamed_addr constant [16 x i8] c", i32 -1, i32 0\00" +@.str941 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str942 = private unnamed_addr constant [14 x i8] c", i32 1, i32 \00" +@.str943 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str944 = private unnamed_addr constant [3 x i8] c", \00" +@.str945 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str946 = private unnamed_addr constant [3 x i8] c", \00" +@.str947 = private unnamed_addr constant [14 x i8] c"icmp sle i32 \00" +@.str948 = private unnamed_addr constant [3 x i8] c", \00" +@.str949 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str950 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str951 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str952 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str953 = private unnamed_addr constant [11 x i8] c"smoothstep\00" +@.str954 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str955 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str956 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str957 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str958 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str959 = private unnamed_addr constant [8 x i8] c", 65536\00" +@.str960 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str961 = private unnamed_addr constant [18 x i8] c", i32 65536, i32 \00" +@.str962 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str963 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str964 = private unnamed_addr constant [17 x i8] c"sub i32 196608, \00" +@.str965 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str966 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str967 = private unnamed_addr constant [2968 x i8] c"@L_sin_tab = private unnamed_addr constant [256 x i32] [i32 0, i32 1608, i32 3216, i32 4821, i32 6424, i32 8022, i32 9616, i32 11204, i32 12785, i32 14359, i32 15924, i32 17479, i32 19024, i32 20557, i32 22078, i32 23586, i32 25080, i32 26558, i32 28020, i32 29466, i32 30893, i32 32303, i32 33692, i32 35062, i32 36410, i32 37736, i32 39040, i32 40320, i32 41576, i32 42806, i32 44011, i32 45190, i32 46341, i32 47464, i32 48559, i32 49624, i32 50660, i32 51665, i32 52639, i32 53581, i32 54491, i32 55368, i32 56212, i32 57022, i32 57798, i32 58538, i32 59244, i32 59914, i32 60547, i32 61145, i32 61705, i32 62228, i32 62714, i32 63162, i32 63572, i32 63944, i32 64277, i32 64571, i32 64827, i32 65043, i32 65220, i32 65358, i32 65457, i32 65516, i32 65536, i32 65516, i32 65457, i32 65358, i32 65220, i32 65043, i32 64827, i32 64571, i32 64277, i32 63944, i32 63572, i32 63162, i32 62714, i32 62228, i32 61705, i32 61145, i32 60547, i32 59914, i32 59244, i32 58538, i32 57798, i32 57022, i32 56212, i32 55368, i32 54491, i32 53581, i32 52639, i32 51665, i32 50660, i32 49624, i32 48559, i32 47464, i32 46341, i32 45190, i32 44011, i32 42806, i32 41576, i32 40320, i32 39040, i32 37736, i32 36410, i32 35062, i32 33692, i32 32303, i32 30893, i32 29466, i32 28020, i32 26558, i32 25080, i32 23586, i32 22078, i32 20557, i32 19024, i32 17479, i32 15924, i32 14359, i32 12785, i32 11204, i32 9616, i32 8022, i32 6424, i32 4821, i32 3216, i32 1608, i32 0, i32 -1608, i32 -3216, i32 -4821, i32 -6424, i32 -8022, i32 -9616, i32 -11204, i32 -12785, i32 -14359, i32 -15924, i32 -17479, i32 -19024, i32 -20557, i32 -22078, i32 -23586, i32 -25080, i32 -26558, i32 -28020, i32 -29466, i32 -30893, i32 -32303, i32 -33692, i32 -35062, i32 -36410, i32 -37736, i32 -39040, i32 -40320, i32 -41576, i32 -42806, i32 -44011, i32 -45190, i32 -46341, i32 -47464, i32 -48559, i32 -49624, i32 -50660, i32 -51665, i32 -52639, i32 -53581, i32 -54491, i32 -55368, i32 -56212, i32 -57022, i32 -57798, i32 -58538, i32 -59244, i32 -59914, i32 -60547, i32 -61145, i32 -61705, i32 -62228, i32 -62714, i32 -63162, i32 -63572, i32 -63944, i32 -64277, i32 -64571, i32 -64827, i32 -65043, i32 -65220, i32 -65358, i32 -65457, i32 -65516, i32 -65536, i32 -65516, i32 -65457, i32 -65358, i32 -65220, i32 -65043, i32 -64827, i32 -64571, i32 -64277, i32 -63944, i32 -63572, i32 -63162, i32 -62714, i32 -62228, i32 -61705, i32 -61145, i32 -60547, i32 -59914, i32 -59244, i32 -58538, i32 -57798, i32 -57022, i32 -56212, i32 -55368, i32 -54491, i32 -53581, i32 -52639, i32 -51665, i32 -50660, i32 -49624, i32 -48559, i32 -47464, i32 -46341, i32 -45190, i32 -44011, i32 -42806, i32 -41576, i32 -40320, i32 -39040, i32 -37736, i32 -36410, i32 -35062, i32 -33692, i32 -32303, i32 -30893, i32 -29466, i32 -28020, i32 -26558, i32 -25080, i32 -23586, i32 -22078, i32 -20557, i32 -19024, i32 -17479, i32 -15924, i32 -14359, i32 -12785, i32 -11204, i32 -9616, i32 -8022, i32 -6424, i32 -4821, i32 -3216, i32 -1608]\0A\00" +@.str968 = private unnamed_addr constant [34 x i8] c"define i32 @fn_fx_sqrt(i32 %x) {\0A\00" +@.str969 = private unnamed_addr constant [73 x i8] c"entry:\0A %neg = icmp slt i32 %x, 0\0A br i1 %neg, label %ret0, label %go\0A\00" +@.str970 = private unnamed_addr constant [19 x i8] c"ret0:\0A ret i32 0\0A\00" +@.str971 = private unnamed_addr constant [58 x i8] c"go:\0A %x64 = sext i32 %x to i64\0A %n0 = shl i64 %x64, 16\0A\00" +@.str972 = private unnamed_addr constant [58 x i8] c" %np = alloca i64\0A %rp = alloca i64\0A %bp = alloca i64\0A\00" +@.str973 = private unnamed_addr constant [106 x i8] c" store i64 %n0, ptr %np\0A store i64 0, ptr %rp\0A store i64 4611686018427387904, ptr %bp\0A br label %adj\0A\00" +@.str974 = private unnamed_addr constant [126 x i8] c"adj:\0A %b1 = load i64, ptr %bp\0A %n1 = load i64, ptr %np\0A %tb = icmp ugt i64 %b1, %n1\0A br i1 %tb, label %adjb, label %loop\0A\00" +@.str975 = private unnamed_addr constant [72 x i8] c"adjb:\0A %b2 = lshr i64 %b1, 2\0A store i64 %b2, ptr %bp\0A br label %adj\0A\00" +@.str976 = private unnamed_addr constant [98 x i8] c"loop:\0A %b3 = load i64, ptr %bp\0A %bz = icmp eq i64 %b3, 0\0A br i1 %bz, label %done, label %body\0A\00" +@.str977 = private unnamed_addr constant [152 x i8] c"body:\0A %r1 = load i64, ptr %rp\0A %n2 = load i64, ptr %np\0A %rb = add i64 %r1, %b3\0A %ge = icmp uge i64 %n2, %rb\0A br i1 %ge, label %sub, label %shift\0A\00" +@.str978 = private unnamed_addr constant [153 x i8] c"sub:\0A %n3 = sub i64 %n2, %rb\0A store i64 %n3, ptr %np\0A %rsh = lshr i64 %r1, 1\0A %rnew = add i64 %rsh, %b3\0A store i64 %rnew, ptr %rp\0A br label %next\0A\00" +@.str979 = private unnamed_addr constant [78 x i8] c"shift:\0A %rsh2 = lshr i64 %r1, 1\0A store i64 %rsh2, ptr %rp\0A br label %next\0A\00" +@.str980 = private unnamed_addr constant [73 x i8] c"next:\0A %b4 = lshr i64 %b3, 2\0A store i64 %b4, ptr %bp\0A br label %loop\0A\00" +@.str981 = private unnamed_addr constant [80 x i8] c"done:\0A %rf = load i64, ptr %rp\0A %r32 = trunc i64 %rf to i32\0A ret i32 %r32\0A}\0A\00" +@.str982 = private unnamed_addr constant [33 x i8] c"define i32 @fn_fx_sin(i32 %x) {\0A\00" +@.str983 = private unnamed_addr constant [82 x i8] c" %xe = sext i32 %x to i64\0A %m = mul i64 %xe, 2670177\0A %idxf = ashr i64 %m, 16\0A\00" +@.str984 = private unnamed_addr constant [85 x i8] c" %i0 = ashr i64 %idxf, 16\0A %i0m = and i64 %i0, 255\0A %frac = and i64 %idxf, 65535\0A\00" +@.str985 = private unnamed_addr constant [51 x i8] c" %i1 = add i64 %i0m, 1\0A %i1m = and i64 %i1, 255\0A\00" +@.str986 = private unnamed_addr constant [94 x i8] c" %p0 = getelementptr [256 x i32], ptr @L_sin_tab, i64 0, i64 %i0m\0A %v0 = load i32, ptr %p0\0A\00" +@.str987 = private unnamed_addr constant [94 x i8] c" %p1 = getelementptr [256 x i32], ptr @L_sin_tab, i64 0, i64 %i1m\0A %v1 = load i32, ptr %p1\0A\00" +@.str988 = private unnamed_addr constant [184 x i8] c" %d = sub i32 %v1, %v0\0A %de = sext i32 %d to i64\0A %dm = mul i64 %de, %frac\0A %dsh = ashr i64 %dm, 16\0A %dsh32 = trunc i64 %dsh to i32\0A %res = add i32 %v0, %dsh32\0A ret i32 %res\0A}\0A\00" +@.str989 = private unnamed_addr constant [43 x i8] c"define i32 @fn_fx_atan2(i32 %y, i32 %x) {\0A\00" +@.str990 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str991 = private unnamed_addr constant [27 x i8] c" %xz = icmp eq i32 %x, 0\0A\00" +@.str992 = private unnamed_addr constant [27 x i8] c" %yz = icmp eq i32 %y, 0\0A\00" +@.str993 = private unnamed_addr constant [28 x i8] c" %both0 = and i1 %xz, %yz\0A\00" +@.str994 = private unnamed_addr constant [37 x i8] c" br i1 %both0, label %z, label %go\0A\00" +@.str995 = private unnamed_addr constant [4 x i8] c"z:\0A\00" +@.str996 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str997 = private unnamed_addr constant [5 x i8] c"go:\0A\00" +@.str998 = private unnamed_addr constant [30 x i8] c" %yneg = icmp slt i32 %y, 0\0A\00" +@.str999 = private unnamed_addr constant [24 x i8] c" %yng = sub i32 0, %y\0A\00" +@.str1000 = private unnamed_addr constant [44 x i8] c" %ay0 = select i1 %yneg, i32 %yng, i32 %y\0A\00" +@.str1001 = private unnamed_addr constant [25 x i8] c" %ay = add i32 %ay0, 1\0A\00" +@.str1002 = private unnamed_addr constant [30 x i8] c" %xpos = icmp sge i32 %x, 0\0A\00" +@.str1003 = private unnamed_addr constant [37 x i8] c" br i1 %xpos, label %xp, label %xn\0A\00" +@.str1004 = private unnamed_addr constant [5 x i8] c"xp:\0A\00" +@.str1005 = private unnamed_addr constant [25 x i8] c" %n1 = sub i32 %x, %ay\0A\00" +@.str1006 = private unnamed_addr constant [25 x i8] c" %d1 = add i32 %x, %ay\0A\00" +@.str1007 = private unnamed_addr constant [16 x i8] c" br label %dv\0A\00" +@.str1008 = private unnamed_addr constant [5 x i8] c"xn:\0A\00" +@.str1009 = private unnamed_addr constant [25 x i8] c" %n2 = add i32 %x, %ay\0A\00" +@.str1010 = private unnamed_addr constant [25 x i8] c" %d2 = sub i32 %ay, %x\0A\00" +@.str1011 = private unnamed_addr constant [16 x i8] c" br label %dv\0A\00" +@.str1012 = private unnamed_addr constant [5 x i8] c"dv:\0A\00" +@.str1013 = private unnamed_addr constant [45 x i8] c" %num = phi i32 [ %n1, %xp ], [ %n2, %xn ]\0A\00" +@.str1014 = private unnamed_addr constant [45 x i8] c" %den = phi i32 [ %d1, %xp ], [ %d2, %xn ]\0A\00" +@.str1015 = private unnamed_addr constant [51 x i8] c" %base = phi i32 [ 51472, %xp ], [ 154416, %xn ]\0A\00" +@.str1016 = private unnamed_addr constant [31 x i8] c" %n64 = sext i32 %num to i64\0A\00" +@.str1017 = private unnamed_addr constant [27 x i8] c" %nsh = shl i64 %n64, 16\0A\00" +@.str1018 = private unnamed_addr constant [31 x i8] c" %d64 = sext i32 %den to i64\0A\00" +@.str1019 = private unnamed_addr constant [30 x i8] c" %rdv = sdiv i64 %nsh, %d64\0A\00" +@.str1020 = private unnamed_addr constant [30 x i8] c" %r = trunc i64 %rdv to i32\0A\00" +@.str1021 = private unnamed_addr constant [30 x i8] c" %r64a = sext i32 %r to i64\0A\00" +@.str1022 = private unnamed_addr constant [30 x i8] c" %r64b = sext i32 %r to i64\0A\00" +@.str1023 = private unnamed_addr constant [30 x i8] c" %rr = mul i64 %r64a, %r64b\0A\00" +@.str1024 = private unnamed_addr constant [27 x i8] c" %rrs = ashr i64 %rr, 16\0A\00" +@.str1025 = private unnamed_addr constant [31 x i8] c" %r2 = trunc i64 %rrs to i32\0A\00" +@.str1026 = private unnamed_addr constant [30 x i8] c" %r2e = sext i32 %r2 to i64\0A\00" +@.str1027 = private unnamed_addr constant [28 x i8] c" %re = sext i32 %r to i64\0A\00" +@.str1028 = private unnamed_addr constant [28 x i8] c" %r3m = mul i64 %r2e, %re\0A\00" +@.str1029 = private unnamed_addr constant [28 x i8] c" %r3s = ashr i64 %r3m, 16\0A\00" +@.str1030 = private unnamed_addr constant [31 x i8] c" %r3 = trunc i64 %r3s to i32\0A\00" +@.str1031 = private unnamed_addr constant [30 x i8] c" %r3e = sext i32 %r3 to i64\0A\00" +@.str1032 = private unnamed_addr constant [29 x i8] c" %c1 = mul i64 %r3e, 12865\0A\00" +@.str1033 = private unnamed_addr constant [27 x i8] c" %c1s = ashr i64 %c1, 16\0A\00" +@.str1034 = private unnamed_addr constant [31 x i8] c" %t1 = trunc i64 %c1s to i32\0A\00" +@.str1035 = private unnamed_addr constant [29 x i8] c" %re2 = sext i32 %r to i64\0A\00" +@.str1036 = private unnamed_addr constant [29 x i8] c" %c2 = mul i64 %re2, 64337\0A\00" +@.str1037 = private unnamed_addr constant [27 x i8] c" %c2s = ashr i64 %c2, 16\0A\00" +@.str1038 = private unnamed_addr constant [31 x i8] c" %t2 = trunc i64 %c2s to i32\0A\00" +@.str1039 = private unnamed_addr constant [28 x i8] c" %poly = sub i32 %t1, %t2\0A\00" +@.str1040 = private unnamed_addr constant [33 x i8] c" %angle = add i32 %poly, %base\0A\00" +@.str1041 = private unnamed_addr constant [31 x i8] c" %angneg = sub i32 0, %angle\0A\00" +@.str1042 = private unnamed_addr constant [51 x i8] c" %res = select i1 %yneg, i32 %angneg, i32 %angle\0A\00" +@.str1043 = private unnamed_addr constant [16 x i8] c" ret i32 %res\0A\00" +@.str1044 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1045 = private unnamed_addr constant [7 x i8] c"length\00" +@.str1046 = private unnamed_addr constant [8 x i8] c"char_at\00" +@.str1047 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str1048 = private unnamed_addr constant [7 x i8] c"equals\00" +@.str1049 = private unnamed_addr constant [7 x i8] c"concat\00" +@.str1050 = private unnamed_addr constant [7 x i8] c"to_int\00" +@.str1051 = private unnamed_addr constant [9 x i8] c"from_int\00" +@.str1052 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str1053 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str1054 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str1055 = private unnamed_addr constant [9 x i8] c"index_of\00" +@.str1056 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str1057 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str1058 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str1059 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str1060 = private unnamed_addr constant [9 x i8] c"pad_left\00" +@.str1061 = private unnamed_addr constant [10 x i8] c"pad_right\00" +@.str1062 = private unnamed_addr constant [6 x i8] c"split\00" +@.str1063 = private unnamed_addr constant [5 x i8] c"join\00" +@.str1064 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str1065 = private unnamed_addr constant [9 x i8] c"from_int\00" +@.str1066 = private unnamed_addr constant [26 x i8] c"call ptr @fn_int_str(i32 \00" +@.str1067 = private unnamed_addr constant [2 x i8] c")\00" +@.str1068 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1069 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str1070 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_slice(ptr \00" +@.str1071 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1072 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1073 = private unnamed_addr constant [2 x i8] c")\00" +@.str1074 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1075 = private unnamed_addr constant [7 x i8] c"equals\00" +@.str1076 = private unnamed_addr constant [25 x i8] c"call i32 @fn_str_eq(ptr \00" +@.str1077 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1078 = private unnamed_addr constant [2 x i8] c")\00" +@.str1079 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str1080 = private unnamed_addr constant [7 x i8] c"concat\00" +@.str1081 = private unnamed_addr constant [29 x i8] c"call ptr @fn_str_concat(ptr \00" +@.str1082 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1083 = private unnamed_addr constant [2 x i8] c")\00" +@.str1084 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1085 = private unnamed_addr constant [7 x i8] c"length\00" +@.str1086 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str1087 = private unnamed_addr constant [2 x i8] c")\00" +@.str1088 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str1089 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1090 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1091 = private unnamed_addr constant [8 x i8] c"char_at\00" +@.str1092 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str1093 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1094 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str1095 = private unnamed_addr constant [9 x i8] c"zext i8 \00" +@.str1096 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1097 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1098 = private unnamed_addr constant [7 x i8] c"to_int\00" +@.str1099 = private unnamed_addr constant [20 x i8] c"call i32 @atoi(ptr \00" +@.str1100 = private unnamed_addr constant [2 x i8] c")\00" +@.str1101 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1102 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str1103 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_upper(ptr \00" +@.str1104 = private unnamed_addr constant [2 x i8] c")\00" +@.str1105 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1106 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str1107 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_lower(ptr \00" @.str1108 = private unnamed_addr constant [2 x i8] c")\00" @.str1109 = private unnamed_addr constant [4 x i8] c"str\00" -@.str1110 = private unnamed_addr constant [25 x i8] c"call i32 @fn_str_eq(ptr \00" -@.str1111 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1110 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str1111 = private unnamed_addr constant [27 x i8] c"call ptr @fn_str_trim(ptr \00" @.str1112 = private unnamed_addr constant [2 x i8] c")\00" -@.str1113 = private unnamed_addr constant [3 x i8] c"!=\00" -@.str1114 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1115 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1116 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1117 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1118 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1119 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1120 = private unnamed_addr constant [4 x i8] c"and\00" -@.str1121 = private unnamed_addr constant [3 x i8] c"or\00" -@.str1122 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1123 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1124 = private unnamed_addr constant [2 x i8] c"+\00" -@.str1125 = private unnamed_addr constant [2 x i8] c"+\00" -@.str1126 = private unnamed_addr constant [3 x i8] c"==\00" -@.str1127 = private unnamed_addr constant [3 x i8] c"!=\00" -@.str1128 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1129 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1130 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1131 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1132 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1133 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1134 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str1135 = private unnamed_addr constant [2 x i8] c" \00" -@.str1136 = private unnamed_addr constant [2 x i8] c" \00" -@.str1137 = private unnamed_addr constant [3 x i8] c", \00" -@.str1138 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1139 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1140 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1141 = private unnamed_addr constant [2 x i8] c"*\00" -@.str1142 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str1143 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1144 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str1145 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1146 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str1147 = private unnamed_addr constant [3 x i8] c", \00" -@.str1148 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" -@.str1149 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str1150 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str1151 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1152 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1153 = private unnamed_addr constant [2 x i8] c"/\00" -@.str1154 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str1155 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1156 = private unnamed_addr constant [9 x i8] c"shl i64 \00" -@.str1157 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str1158 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str1113 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1114 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str1115 = private unnamed_addr constant [29 x i8] c"call ptr @fn_str_repeat(ptr \00" +@.str1116 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1117 = private unnamed_addr constant [2 x i8] c")\00" +@.str1118 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1119 = private unnamed_addr constant [9 x i8] c"pad_left\00" +@.str1120 = private unnamed_addr constant [26 x i8] c"call ptr @fn_str_pad(ptr \00" +@.str1121 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1122 = private unnamed_addr constant [8 x i8] c", i1 1)\00" +@.str1123 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1124 = private unnamed_addr constant [10 x i8] c"pad_right\00" +@.str1125 = private unnamed_addr constant [26 x i8] c"call ptr @fn_str_pad(ptr \00" +@.str1126 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1127 = private unnamed_addr constant [8 x i8] c", i1 0)\00" +@.str1128 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1129 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str1130 = private unnamed_addr constant [30 x i8] c"call ptr @fn_str_replace(ptr \00" +@.str1131 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1132 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1133 = private unnamed_addr constant [2 x i8] c")\00" +@.str1134 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1135 = private unnamed_addr constant [6 x i8] c"split\00" +@.str1136 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_split(ptr \00" +@.str1137 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1138 = private unnamed_addr constant [2 x i8] c")\00" +@.str1139 = private unnamed_addr constant [6 x i8] c"[]str\00" +@.str1140 = private unnamed_addr constant [5 x i8] c"join\00" +@.str1141 = private unnamed_addr constant [27 x i8] c"call ptr @fn_str_join(ptr \00" +@.str1142 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1143 = private unnamed_addr constant [2 x i8] c")\00" +@.str1144 = private unnamed_addr constant [4 x i8] c"str\00" +@.str1145 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str1146 = private unnamed_addr constant [9 x i8] c"index_of\00" +@.str1147 = private unnamed_addr constant [22 x i8] c"call ptr @strstr(ptr \00" +@.str1148 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1149 = private unnamed_addr constant [2 x i8] c")\00" +@.str1150 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str1151 = private unnamed_addr constant [13 x i8] c"icmp ne ptr \00" +@.str1152 = private unnamed_addr constant [7 x i8] c", null\00" +@.str1153 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str1154 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1155 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str1156 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str1157 = private unnamed_addr constant [7 x i8] c", null\00" +@.str1158 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" @.str1159 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1160 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" -@.str1161 = private unnamed_addr constant [3 x i8] c", \00" -@.str1162 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str1163 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1164 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1165 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str1166 = private unnamed_addr constant [3 x i8] c", \00" -@.str1167 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1168 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str1169 = private unnamed_addr constant [3 x i8] c", \00" -@.str1170 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1171 = private unnamed_addr constant [59 x i8] c"named and positional arguments cannot be mixed in one call\00" -@.str1172 = private unnamed_addr constant [26 x i8] c"wrong number of arguments\00" -@.str1173 = private unnamed_addr constant [19 x i8] c"no argument named \00" -@.str1174 = private unnamed_addr constant [7 x i8] c"Screen\00" -@.str1175 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str1176 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str1177 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1178 = private unnamed_addr constant [15 x i8] c"fill_rectangle\00" -@.str1179 = private unnamed_addr constant [10 x i8] c"fill_rect\00" -@.str1180 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1181 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1182 = private unnamed_addr constant [6 x i8] c"width\00" -@.str1183 = private unnamed_addr constant [7 x i8] c"height\00" -@.str1184 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1185 = private unnamed_addr constant [15 x i8] c"draw_rectangle\00" -@.str1186 = private unnamed_addr constant [11 x i8] c"frame_rect\00" -@.str1187 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1188 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1189 = private unnamed_addr constant [6 x i8] c"width\00" -@.str1190 = private unnamed_addr constant [7 x i8] c"height\00" -@.str1191 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1192 = private unnamed_addr constant [10 x i8] c"put_pixel\00" -@.str1193 = private unnamed_addr constant [7 x i8] c"put_px\00" -@.str1194 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1195 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1196 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1197 = private unnamed_addr constant [10 x i8] c"draw_text\00" -@.str1198 = private unnamed_addr constant [5 x i8] c"text\00" -@.str1199 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1200 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1201 = private unnamed_addr constant [5 x i8] c"text\00" -@.str1202 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1203 = private unnamed_addr constant [6 x i8] c"scale\00" -@.str1204 = private unnamed_addr constant [12 x i8] c"draw_number\00" -@.str1205 = private unnamed_addr constant [9 x i8] c"text_int\00" -@.str1206 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1207 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1208 = private unnamed_addr constant [6 x i8] c"value\00" -@.str1209 = private unnamed_addr constant [6 x i8] c"color\00" -@.str1210 = private unnamed_addr constant [6 x i8] c"scale\00" -@.str1211 = private unnamed_addr constant [5 x i8] c"show\00" -@.str1212 = private unnamed_addr constant [8 x i8] c"present\00" -@.str1213 = private unnamed_addr constant [6 x i8] c"width\00" -@.str1214 = private unnamed_addr constant [9 x i8] c"screen_w\00" -@.str1215 = private unnamed_addr constant [7 x i8] c"height\00" -@.str1216 = private unnamed_addr constant [9 x i8] c"screen_h\00" -@.str1217 = private unnamed_addr constant [7 x i8] c"status\00" -@.str1218 = private unnamed_addr constant [7 x i8] c"status\00" -@.str1219 = private unnamed_addr constant [5 x i8] c"text\00" -@.str1220 = private unnamed_addr constant [4 x i8] c"Map\00" -@.str1221 = private unnamed_addr constant [5 x i8] c"size\00" -@.str1222 = private unnamed_addr constant [9 x i8] c"map_size\00" -@.str1223 = private unnamed_addr constant [6 x i8] c"width\00" -@.str1224 = private unnamed_addr constant [7 x i8] c"height\00" -@.str1225 = private unnamed_addr constant [4 x i8] c"row\00" -@.str1226 = private unnamed_addr constant [8 x i8] c"map_row\00" -@.str1227 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1228 = private unnamed_addr constant [6 x i8] c"cells\00" -@.str1229 = private unnamed_addr constant [5 x i8] c"tile\00" -@.str1230 = private unnamed_addr constant [5 x i8] c"tile\00" -@.str1231 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1232 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1233 = private unnamed_addr constant [7 x i8] c"Random\00" -@.str1234 = private unnamed_addr constant [6 x i8] c"range\00" -@.str1235 = private unnamed_addr constant [10 x i8] c"rng_range\00" -@.str1236 = private unnamed_addr constant [4 x i8] c"low\00" -@.str1237 = private unnamed_addr constant [5 x i8] c"high\00" -@.str1238 = private unnamed_addr constant [7 x i8] c"chance\00" -@.str1239 = private unnamed_addr constant [11 x i8] c"rng_chance\00" -@.str1240 = private unnamed_addr constant [8 x i8] c"percent\00" -@.str1241 = private unnamed_addr constant [5 x i8] c"seed\00" -@.str1242 = private unnamed_addr constant [5 x i8] c"seed\00" -@.str1243 = private unnamed_addr constant [6 x i8] c"value\00" -@.str1244 = private unnamed_addr constant [6 x i8] c"Input\00" -@.str1245 = private unnamed_addr constant [4 x i8] c"key\00" -@.str1246 = private unnamed_addr constant [4 x i8] c"key\00" -@.str1247 = private unnamed_addr constant [17 x i8] c"unknown builtin \00" -@.str1248 = private unnamed_addr constant [2 x i8] c".\00" -@.str1249 = private unnamed_addr constant [30 x i8] c"call target is not a function\00" -@.str1250 = private unnamed_addr constant [5 x i8] c"self\00" -@.str1251 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1252 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str1253 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1254 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str1255 = private unnamed_addr constant [4 x i8] c"key\00" -@.str1256 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" -@.str1257 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1258 = private unnamed_addr constant [5 x i8] c"save\00" -@.str1259 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" -@.str1260 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1261 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1262 = private unnamed_addr constant [9 x i8] c"ui_build\00" -@.str1263 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" -@.str1264 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1265 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1266 = private unnamed_addr constant [5 x i8] c"load\00" -@.str1267 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" -@.str1268 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1269 = private unnamed_addr constant [11 x i8] c"world_size\00" -@.str1270 = private unnamed_addr constant [25 x i8] c"call i32 @L_world_size()\00" -@.str1271 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1272 = private unnamed_addr constant [11 x i8] c"world_save\00" -@.str1273 = private unnamed_addr constant [28 x i8] c"call i32 @L_world_save(ptr \00" -@.str1274 = private unnamed_addr constant [2 x i8] c")\00" -@.str1275 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1276 = private unnamed_addr constant [11 x i8] c"world_load\00" -@.str1277 = private unnamed_addr constant [31 x i8] c" call void @L_world_load(ptr \00" -@.str1278 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1279 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1280 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1281 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1282 = private unnamed_addr constant [5 x i8] c"quit\00" -@.str1283 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" -@.str1284 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1285 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1286 = private unnamed_addr constant [10 x i8] c"serialize\00" -@.str1287 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_serialize(i32 \00" -@.str1288 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1289 = private unnamed_addr constant [2 x i8] c")\00" -@.str1290 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1291 = private unnamed_addr constant [6 x i8] c"apply\00" -@.str1292 = private unnamed_addr constant [30 x i8] c" call void @ludic_apply(i32 \00" -@.str1293 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1294 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1295 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1296 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1297 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1298 = private unnamed_addr constant [10 x i8] c"sync_size\00" -@.str1299 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_sync_size(i32 \00" -@.str1300 = private unnamed_addr constant [2 x i8] c")\00" -@.str1301 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1302 = private unnamed_addr constant [6 x i8] c"owner\00" -@.str1303 = private unnamed_addr constant [23 x i8] c"call i32 @L_owner(i32 \00" -@.str1304 = private unnamed_addr constant [2 x i8] c")\00" -@.str1305 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1306 = private unnamed_addr constant [10 x i8] c"set_owner\00" -@.str1307 = private unnamed_addr constant [30 x i8] c" call void @L_set_owner(i32 \00" -@.str1308 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1309 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1310 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1311 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1312 = private unnamed_addr constant [9 x i8] c"is_owner\00" -@.str1313 = private unnamed_addr constant [26 x i8] c"call i32 @L_is_owner(i32 \00" -@.str1314 = private unnamed_addr constant [2 x i8] c")\00" -@.str1315 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1316 = private unnamed_addr constant [10 x i8] c"is_server\00" -@.str1317 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_role\00" -@.str1318 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1319 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1320 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1321 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1322 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1323 = private unnamed_addr constant [9 x i8] c"local_id\00" -@.str1324 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_localid\00" -@.str1325 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1326 = private unnamed_addr constant [9 x i8] c"net_pump\00" -@.str1327 = private unnamed_addr constant [27 x i8] c" call void @L_net_pump()\0A\00" -@.str1328 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1329 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1330 = private unnamed_addr constant [11 x i8] c"tick_fixed\00" -@.str1331 = private unnamed_addr constant [29 x i8] c" call void @L_tick_fixed()\0A\00" -@.str1332 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1333 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1334 = private unnamed_addr constant [12 x i8] c"tick_render\00" -@.str1335 = private unnamed_addr constant [30 x i8] c" call void @L_tick_render()\0A\00" -@.str1336 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1337 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1338 = private unnamed_addr constant [9 x i8] c"set_role\00" -@.str1339 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1340 = private unnamed_addr constant [15 x i8] c", ptr @L_role\0A\00" -@.str1341 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1342 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1343 = private unnamed_addr constant [13 x i8] c"set_local_id\00" -@.str1344 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1345 = private unnamed_addr constant [18 x i8] c", ptr @L_localid\0A\00" -@.str1346 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1347 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1348 = private unnamed_addr constant [9 x i8] c"net_send\00" -@.str1349 = private unnamed_addr constant [9 x i8] c"net_send\00" -@.str1350 = private unnamed_addr constant [29 x i8] c" call void @L_net_send(i32 \00" -@.str1351 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1352 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1353 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1354 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1355 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1356 = private unnamed_addr constant [9 x i8] c"net_poll\00" -@.str1357 = private unnamed_addr constant [9 x i8] c"net_poll\00" -@.str1358 = private unnamed_addr constant [26 x i8] c"call i32 @L_net_poll(ptr \00" -@.str1359 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1360 = private unnamed_addr constant [2 x i8] c")\00" -@.str1361 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1362 = private unnamed_addr constant [4 x i8] c"len\00" -@.str1363 = private unnamed_addr constant [5 x i8] c"push\00" -@.str1364 = private unnamed_addr constant [4 x i8] c"str\00" -@.str1365 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1366 = private unnamed_addr constant [26 x i8] c"call ptr @fn_int_str(i32 \00" -@.str1367 = private unnamed_addr constant [2 x i8] c")\00" -@.str1368 = private unnamed_addr constant [4 x i8] c"str\00" -@.str1369 = private unnamed_addr constant [6 x i8] c"print\00" -@.str1370 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1371 = private unnamed_addr constant [51 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_line, ptr \00" -@.str1372 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1373 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" -@.str1374 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1375 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1376 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1377 = private unnamed_addr constant [6 x i8] c"bytes\00" -@.str1378 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str1379 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1380 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str1381 = private unnamed_addr constant [2 x i8] c")\00" -@.str1382 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1383 = private unnamed_addr constant [6 x i8] c"words\00" -@.str1384 = private unnamed_addr constant [9 x i8] c"mul i32 \00" -@.str1385 = private unnamed_addr constant [4 x i8] c", 4\00" -@.str1386 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str1387 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1388 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str1389 = private unnamed_addr constant [2 x i8] c")\00" -@.str1390 = private unnamed_addr constant [6 x i8] c"words\00" -@.str1391 = private unnamed_addr constant [3 x i8] c"fx\00" -@.str1392 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str1393 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str1394 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1395 = private unnamed_addr constant [4 x i8] c"flr\00" -@.str1396 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" -@.str1397 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str1398 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1399 = private unnamed_addr constant [14 x i8] c"world_prop_id\00" -@.str1400 = private unnamed_addr constant [29 x i8] c"call i32 @ludic_prop_id(ptr \00" -@.str1401 = private unnamed_addr constant [2 x i8] c")\00" -@.str1402 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1403 = private unnamed_addr constant [15 x i8] c"world_field_id\00" -@.str1404 = private unnamed_addr constant [30 x i8] c"call i32 @ludic_field_id(i32 \00" -@.str1405 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1406 = private unnamed_addr constant [2 x i8] c")\00" -@.str1407 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1408 = private unnamed_addr constant [10 x i8] c"world_get\00" -@.str1409 = private unnamed_addr constant [25 x i8] c"call i64 @ludic_get(i32 \00" -@.str1410 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1411 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1412 = private unnamed_addr constant [2 x i8] c")\00" -@.str1413 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str1414 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1415 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1416 = private unnamed_addr constant [10 x i8] c"world_set\00" -@.str1417 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str1418 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str1419 = private unnamed_addr constant [28 x i8] c" call void @ludic_set(i32 \00" -@.str1420 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1421 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1422 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str1423 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1424 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1425 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1426 = private unnamed_addr constant [10 x i8] c"world_has\00" -@.str1427 = private unnamed_addr constant [25 x i8] c"call i32 @ludic_has(i32 \00" -@.str1428 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1429 = private unnamed_addr constant [2 x i8] c")\00" -@.str1430 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1431 = private unnamed_addr constant [12 x i8] c"world_count\00" -@.str1432 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_entity_count()\00" -@.str1433 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1434 = private unnamed_addr constant [11 x i8] c"world_kind\00" -@.str1435 = private unnamed_addr constant [26 x i8] c"call i32 @ludic_kind(i32 \00" -@.str1436 = private unnamed_addr constant [2 x i8] c")\00" -@.str1437 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1438 = private unnamed_addr constant [15 x i8] c"world_model_id\00" -@.str1439 = private unnamed_addr constant [30 x i8] c"call i32 @ludic_model_id(ptr \00" -@.str1440 = private unnamed_addr constant [2 x i8] c")\00" -@.str1441 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1442 = private unnamed_addr constant [17 x i8] c"world_query_next\00" -@.str1443 = private unnamed_addr constant [32 x i8] c"call i32 @ludic_query_next(i32 \00" -@.str1444 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1445 = private unnamed_addr constant [2 x i8] c")\00" -@.str1446 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1447 = private unnamed_addr constant [20 x i8] c"world_register_prop\00" -@.str1448 = private unnamed_addr constant [35 x i8] c"call i32 @ludic_register_prop(ptr \00" -@.str1449 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1450 = private unnamed_addr constant [2 x i8] c")\00" -@.str1451 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1452 = private unnamed_addr constant [17 x i8] c"world_attach_dyn\00" -@.str1453 = private unnamed_addr constant [35 x i8] c" call void @ludic_attach_dyn(i32 \00" -@.str1454 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1455 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1456 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1457 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1458 = private unnamed_addr constant [17 x i8] c"world_detach_dyn\00" -@.str1459 = private unnamed_addr constant [35 x i8] c" call void @ludic_detach_dyn(i32 \00" -@.str1460 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1461 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1462 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1463 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1464 = private unnamed_addr constant [12 x i8] c"world_spawn\00" -@.str1465 = private unnamed_addr constant [27 x i8] c"call i32 @ludic_spawn(i32 \00" -@.str1466 = private unnamed_addr constant [2 x i8] c")\00" -@.str1467 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1468 = private unnamed_addr constant [3 x i8] c" \00" -@.str1469 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1470 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1471 = private unnamed_addr constant [4 x i8] c" = \00" -@.str1472 = private unnamed_addr constant [6 x i8] c"call \00" -@.str1473 = private unnamed_addr constant [3 x i8] c" @\00" -@.str1474 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1475 = private unnamed_addr constant [3 x i8] c", \00" -@.str1476 = private unnamed_addr constant [2 x i8] c" \00" -@.str1477 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1478 = private unnamed_addr constant [4 x i8] c"rt_\00" -@.str1479 = private unnamed_addr constant [18 x i8] c"unknown function \00" -@.str1480 = private unnamed_addr constant [3 x i8] c" \00" -@.str1481 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1482 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1483 = private unnamed_addr constant [4 x i8] c" = \00" -@.str1484 = private unnamed_addr constant [6 x i8] c"call \00" -@.str1485 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str1486 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1487 = private unnamed_addr constant [3 x i8] c", \00" -@.str1488 = private unnamed_addr constant [2 x i8] c" \00" -@.str1489 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1490 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1491 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1492 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1493 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str1494 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1495 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1496 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1497 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_slice(ptr \00" -@.str1498 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1499 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1500 = private unnamed_addr constant [2 x i8] c")\00" -@.str1501 = private unnamed_addr constant [4 x i8] c"str\00" -@.str1502 = private unnamed_addr constant [4 x i8] c"str\00" -@.str1503 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1504 = private unnamed_addr constant [6 x i8] c"load \00" -@.str1505 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" -@.str1506 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1507 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" -@.str1508 = private unnamed_addr constant [6 x i8] c"Color\00" -@.str1509 = private unnamed_addr constant [21 x i8] c"unknown color Color.\00" -@.str1510 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1511 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1512 = private unnamed_addr constant [5 x i8] c"byte\00" -@.str1513 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1514 = private unnamed_addr constant [9 x i8] c"zext i8 \00" -@.str1515 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1516 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1517 = private unnamed_addr constant [2 x i8] c"-\00" -@.str1518 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str1519 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1520 = private unnamed_addr constant [2 x i8] c"~\00" -@.str1521 = private unnamed_addr constant [9 x i8] c"xor i32 \00" -@.str1522 = private unnamed_addr constant [5 x i8] c", -1\00" -@.str1523 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1524 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1525 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1526 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str1527 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str1528 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str1529 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" -@.str1530 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1531 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1532 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1533 = private unnamed_addr constant [2 x i8] c" \00" -@.str1534 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1535 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1536 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1537 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1538 = private unnamed_addr constant [29 x i8] c"cannot assign to immutable '\00" -@.str1539 = private unnamed_addr constant [41 x i8] c"' (declared with let; use var) \E2\80\94 line \00" -@.str1540 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" -@.str1541 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str1542 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" -@.str1543 = private unnamed_addr constant [2 x i8] c"=\00" -@.str1544 = private unnamed_addr constant [6 x i8] c"load \00" -@.str1545 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1546 = private unnamed_addr constant [4 x i8] c"add\00" -@.str1547 = private unnamed_addr constant [3 x i8] c"-=\00" -@.str1548 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str1549 = private unnamed_addr constant [3 x i8] c"*=\00" -@.str1550 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str1551 = private unnamed_addr constant [3 x i8] c"/=\00" -@.str1552 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str1553 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str1554 = private unnamed_addr constant [3 x i8] c", \00" -@.str1555 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str1556 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" -@.str1557 = private unnamed_addr constant [7 x i8] c" to i8\00" -@.str1558 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1559 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1560 = private unnamed_addr constant [5 x i8] c"then\00" -@.str1561 = private unnamed_addr constant [5 x i8] c"else\00" -@.str1562 = private unnamed_addr constant [6 x i8] c"ifend\00" -@.str1563 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1564 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1565 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1566 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1567 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1568 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1569 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1570 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1571 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1572 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1573 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1574 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1575 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1576 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1577 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1578 = private unnamed_addr constant [6 x i8] c"wcond\00" -@.str1579 = private unnamed_addr constant [6 x i8] c"wbody\00" -@.str1580 = private unnamed_addr constant [5 x i8] c"wend\00" -@.str1581 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1582 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1583 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1584 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1585 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1586 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1587 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1588 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1589 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1590 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1591 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1592 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1593 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1594 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1595 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1596 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1597 = private unnamed_addr constant [6 x i8] c"fcond\00" -@.str1598 = private unnamed_addr constant [6 x i8] c"fbody\00" -@.str1599 = private unnamed_addr constant [6 x i8] c"fcont\00" -@.str1600 = private unnamed_addr constant [5 x i8] c"fend\00" -@.str1601 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1602 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1603 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1604 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1605 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str1606 = private unnamed_addr constant [3 x i8] c", \00" -@.str1607 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1608 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1609 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1610 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1611 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1612 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1613 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1614 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1615 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1616 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1617 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1618 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1619 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1620 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1621 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1622 = private unnamed_addr constant [8 x i8] c"%retval\00" -@.str1623 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1624 = private unnamed_addr constant [2 x i8] c"_\00" -@.str1625 = private unnamed_addr constant [5 x i8] c"mend\00" -@.str1626 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1627 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1628 = private unnamed_addr constant [3 x i8] c", \00" -@.str1629 = private unnamed_addr constant [7 x i8] c"or i1 \00" -@.str1630 = private unnamed_addr constant [3 x i8] c", \00" -@.str1631 = private unnamed_addr constant [6 x i8] c"mbody\00" -@.str1632 = private unnamed_addr constant [5 x i8] c"marm\00" -@.str1633 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1634 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1635 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1636 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1637 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1638 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1639 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1640 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1641 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1642 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1643 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1644 = private unnamed_addr constant [21 x i8] c"emit: unknown event \00" -@.str1645 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1646 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1647 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1648 = private unnamed_addr constant [3 x i8] c" \00" -@.str1649 = private unnamed_addr constant [53 x i8] c" = getelementptr inbounds i8, ptr @L_sendbuf, i32 0\0A\00" -@.str1650 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1651 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1652 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1653 = private unnamed_addr constant [3 x i8] c" \00" -@.str1654 = private unnamed_addr constant [51 x i8] c" = getelementptr inbounds i8, ptr @L_sendbuf, i32 \00" -@.str1655 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1656 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1657 = private unnamed_addr constant [2 x i8] c" \00" -@.str1658 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1659 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1660 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1661 = private unnamed_addr constant [10 x i8] c"toclients\00" -@.str1662 = private unnamed_addr constant [3 x i8] c"-1\00" -@.str1663 = private unnamed_addr constant [9 x i8] c"net_send\00" -@.str1664 = private unnamed_addr constant [14 x i8] c" call void @\00" -@.str1665 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1666 = private unnamed_addr constant [23 x i8] c", ptr @L_sendbuf, i32 \00" -@.str1667 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1668 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1669 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1670 = private unnamed_addr constant [3 x i8] c", \00" -@.str1671 = private unnamed_addr constant [2 x i8] c" \00" -@.str1672 = private unnamed_addr constant [3 x i8] c" \00" -@.str1673 = private unnamed_addr constant [17 x i8] c" = call i32 @ev_\00" -@.str1674 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1675 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1676 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1677 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str1678 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1679 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1680 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1681 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1682 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1683 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1684 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1685 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1686 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1687 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1688 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1689 = private unnamed_addr constant [44 x i8] c"cancel outside a cancellable event listener\00" -@.str1690 = private unnamed_addr constant [20 x i8] c" store i32 1, ptr \00" -@.str1691 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1692 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" -@.str1693 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" -@.str1694 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" -@.str1695 = private unnamed_addr constant [34 x i8] c"@L_scene = internal global i32 0\0A\00" -@.str1696 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" -@.str1697 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" -@.str1698 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1699 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" -@.str1700 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1701 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" -@.str1702 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1703 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" -@.str1704 = private unnamed_addr constant [33 x i8] c"@L_role = internal global i32 1\0A\00" -@.str1705 = private unnamed_addr constant [36 x i8] c"@L_localid = internal global i32 0\0A\00" -@.str1706 = private unnamed_addr constant [33 x i8] c"@L_owner_arr = internal global [\00" -@.str1707 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1708 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str1709 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1710 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1711 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" -@.str1712 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str1713 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1714 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" -@.str1715 = private unnamed_addr constant [5 x i8] c"@ME_\00" -@.str1716 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" -@.str1717 = private unnamed_addr constant [5 x i8] c"@HE_\00" -@.str1718 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" -@.str1719 = private unnamed_addr constant [5 x i8] c"@LE_\00" -@.str1720 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" -@.str1721 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" -@.str1722 = private unnamed_addr constant [3 x i8] c"%h\00" -@.str1723 = private unnamed_addr constant [3 x i8] c" \00" -@.str1724 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1725 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1726 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str1727 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" -@.str1728 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1729 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" -@.str1730 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" -@.str1731 = private unnamed_addr constant [23 x i8] c" store i32 0, ptr %k\0A\00" -@.str1732 = private unnamed_addr constant [33 x i8] c" %ow = getelementptr inbounds [\00" -@.str1733 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A\00" -@.str1734 = private unnamed_addr constant [25 x i8] c" store i32 -1, ptr %ow\0A\00" -@.str1735 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1736 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" -@.str1737 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1738 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" -@.str1739 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" -@.str1740 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" -@.str1741 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" -@.str1742 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1743 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1744 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" -@.str1745 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" -@.str1746 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1747 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" -@.str1748 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" -@.str1749 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" -@.str1750 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" -@.str1751 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1752 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str1753 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" -@.str1754 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1755 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1756 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1757 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" -@.str1758 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" -@.str1759 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" -@.str1760 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1761 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1762 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" -@.str1763 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1764 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1765 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1766 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" -@.str1767 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" -@.str1768 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" -@.str1769 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1770 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1771 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1160 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str1161 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str1162 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str1163 = private unnamed_addr constant [3 x i8] c", \00" +@.str1164 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str1165 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1166 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str1167 = private unnamed_addr constant [15 x i8] c", i32 -1, i32 \00" +@.str1168 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1169 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str1170 = private unnamed_addr constant [2 x i8] c")\00" +@.str1171 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str1172 = private unnamed_addr constant [23 x i8] c"call i32 @strncmp(ptr \00" +@.str1173 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1174 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str1175 = private unnamed_addr constant [2 x i8] c")\00" +@.str1176 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1177 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1178 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str1179 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1180 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str1181 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str1182 = private unnamed_addr constant [2 x i8] c")\00" +@.str1183 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str1184 = private unnamed_addr constant [3 x i8] c", \00" +@.str1185 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1186 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1187 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1188 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str1189 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1190 = private unnamed_addr constant [7 x i8] c"ew_cmp\00" +@.str1191 = private unnamed_addr constant [7 x i8] c"ew_end\00" +@.str1192 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1193 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1194 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1195 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1196 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1197 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str1198 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str1199 = private unnamed_addr constant [23 x i8] c"call i32 @strncmp(ptr \00" +@.str1200 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1201 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str1202 = private unnamed_addr constant [2 x i8] c")\00" +@.str1203 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1204 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1205 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str1206 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1207 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1208 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1209 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1210 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1211 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1212 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str1213 = private unnamed_addr constant [36 x i8] c"define ptr @fn_str_upper(ptr %s) {\0A\00" +@.str1214 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1215 = private unnamed_addr constant [33 x i8] c" %n = call i64 @strlen(ptr %s)\0A\00" +@.str1216 = private unnamed_addr constant [23 x i8] c" %sz = add i64 %n, 1\0A\00" +@.str1217 = private unnamed_addr constant [36 x i8] c" %out = call ptr @malloc(i64 %sz)\0A\00" +@.str1218 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1219 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1220 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1221 = private unnamed_addr constant [7 x i8] c"cond:\0A\00" +@.str1222 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1223 = private unnamed_addr constant [28 x i8] c" %d = icmp ult i64 %i, %n\0A\00" +@.str1224 = private unnamed_addr constant [37 x i8] c" br i1 %d, label %body, label %fin\0A\00" +@.str1225 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1226 = private unnamed_addr constant [42 x i8] c" %sp = getelementptr i8, ptr %s, i64 %i\0A\00" +@.str1227 = private unnamed_addr constant [25 x i8] c" %c = load i8, ptr %sp\0A\00" +@.str1228 = private unnamed_addr constant [28 x i8] c" %ge = icmp uge i8 %c, 97\0A\00" +@.str1229 = private unnamed_addr constant [29 x i8] c" %le = icmp ule i8 %c, 122\0A\00" +@.str1230 = private unnamed_addr constant [25 x i8] c" %in = and i1 %ge, %le\0A\00" +@.str1231 = private unnamed_addr constant [24 x i8] c" %cc = add i8 %c, -32\0A\00" +@.str1232 = private unnamed_addr constant [38 x i8] c" %oc = select i1 %in, i8 %cc, i8 %c\0A\00" +@.str1233 = private unnamed_addr constant [44 x i8] c" %op = getelementptr i8, ptr %out, i64 %i\0A\00" +@.str1234 = private unnamed_addr constant [25 x i8] c" store i8 %oc, ptr %op\0A\00" +@.str1235 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1236 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1237 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1238 = private unnamed_addr constant [6 x i8] c"fin:\0A\00" +@.str1239 = private unnamed_addr constant [44 x i8] c" %tp = getelementptr i8, ptr %out, i64 %n\0A\00" +@.str1240 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1241 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1242 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1243 = private unnamed_addr constant [36 x i8] c"define ptr @fn_str_lower(ptr %s) {\0A\00" +@.str1244 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1245 = private unnamed_addr constant [33 x i8] c" %n = call i64 @strlen(ptr %s)\0A\00" +@.str1246 = private unnamed_addr constant [23 x i8] c" %sz = add i64 %n, 1\0A\00" +@.str1247 = private unnamed_addr constant [36 x i8] c" %out = call ptr @malloc(i64 %sz)\0A\00" +@.str1248 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1249 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1250 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1251 = private unnamed_addr constant [7 x i8] c"cond:\0A\00" +@.str1252 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1253 = private unnamed_addr constant [28 x i8] c" %d = icmp ult i64 %i, %n\0A\00" +@.str1254 = private unnamed_addr constant [37 x i8] c" br i1 %d, label %body, label %fin\0A\00" +@.str1255 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1256 = private unnamed_addr constant [42 x i8] c" %sp = getelementptr i8, ptr %s, i64 %i\0A\00" +@.str1257 = private unnamed_addr constant [25 x i8] c" %c = load i8, ptr %sp\0A\00" +@.str1258 = private unnamed_addr constant [28 x i8] c" %ge = icmp uge i8 %c, 65\0A\00" +@.str1259 = private unnamed_addr constant [28 x i8] c" %le = icmp ule i8 %c, 90\0A\00" +@.str1260 = private unnamed_addr constant [25 x i8] c" %in = and i1 %ge, %le\0A\00" +@.str1261 = private unnamed_addr constant [23 x i8] c" %cc = add i8 %c, 32\0A\00" +@.str1262 = private unnamed_addr constant [38 x i8] c" %oc = select i1 %in, i8 %cc, i8 %c\0A\00" +@.str1263 = private unnamed_addr constant [44 x i8] c" %op = getelementptr i8, ptr %out, i64 %i\0A\00" +@.str1264 = private unnamed_addr constant [25 x i8] c" store i8 %oc, ptr %op\0A\00" +@.str1265 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1266 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1267 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1268 = private unnamed_addr constant [6 x i8] c"fin:\0A\00" +@.str1269 = private unnamed_addr constant [44 x i8] c" %tp = getelementptr i8, ptr %out, i64 %n\0A\00" +@.str1270 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1271 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1272 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1273 = private unnamed_addr constant [35 x i8] c"define ptr @fn_str_trim(ptr %s) {\0A\00" +@.str1274 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1275 = private unnamed_addr constant [33 x i8] c" %n = call i64 @strlen(ptr %s)\0A\00" +@.str1276 = private unnamed_addr constant [20 x i8] c" %sp = alloca i64\0A\00" +@.str1277 = private unnamed_addr constant [20 x i8] c" %ep = alloca i64\0A\00" +@.str1278 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %sp\0A\00" +@.str1279 = private unnamed_addr constant [25 x i8] c" store i64 %n, ptr %ep\0A\00" +@.str1280 = private unnamed_addr constant [19 x i8] c" br label %lcond\0A\00" +@.str1281 = private unnamed_addr constant [8 x i8] c"lcond:\0A\00" +@.str1282 = private unnamed_addr constant [27 x i8] c" %a0 = load i64, ptr %sp\0A\00" +@.str1283 = private unnamed_addr constant [27 x i8] c" %e0 = load i64, ptr %ep\0A\00" +@.str1284 = private unnamed_addr constant [32 x i8] c" %lt0 = icmp ult i64 %a0, %e0\0A\00" +@.str1285 = private unnamed_addr constant [41 x i8] c" br i1 %lt0, label %lchk, label %rcond\0A\00" +@.str1286 = private unnamed_addr constant [7 x i8] c"lchk:\0A\00" +@.str1287 = private unnamed_addr constant [43 x i8] c" %p0 = getelementptr i8, ptr %s, i64 %a0\0A\00" +@.str1288 = private unnamed_addr constant [26 x i8] c" %c0 = load i8, ptr %p0\0A\00" +@.str1289 = private unnamed_addr constant [36 x i8] c" %ws0 = call i1 @fn_is_ws(i8 %c0)\0A\00" +@.str1290 = private unnamed_addr constant [41 x i8] c" br i1 %ws0, label %linc, label %rcond\0A\00" +@.str1291 = private unnamed_addr constant [7 x i8] c"linc:\0A\00" +@.str1292 = private unnamed_addr constant [24 x i8] c" %a1 = add i64 %a0, 1\0A\00" +@.str1293 = private unnamed_addr constant [26 x i8] c" store i64 %a1, ptr %sp\0A\00" +@.str1294 = private unnamed_addr constant [19 x i8] c" br label %lcond\0A\00" +@.str1295 = private unnamed_addr constant [8 x i8] c"rcond:\0A\00" +@.str1296 = private unnamed_addr constant [27 x i8] c" %a2 = load i64, ptr %sp\0A\00" +@.str1297 = private unnamed_addr constant [27 x i8] c" %e2 = load i64, ptr %ep\0A\00" +@.str1298 = private unnamed_addr constant [32 x i8] c" %lt2 = icmp ult i64 %a2, %e2\0A\00" +@.str1299 = private unnamed_addr constant [41 x i8] c" br i1 %lt2, label %rchk, label %build\0A\00" +@.str1300 = private unnamed_addr constant [7 x i8] c"rchk:\0A\00" +@.str1301 = private unnamed_addr constant [25 x i8] c" %em1 = sub i64 %e2, 1\0A\00" +@.str1302 = private unnamed_addr constant [44 x i8] c" %p1 = getelementptr i8, ptr %s, i64 %em1\0A\00" +@.str1303 = private unnamed_addr constant [26 x i8] c" %c1 = load i8, ptr %p1\0A\00" +@.str1304 = private unnamed_addr constant [36 x i8] c" %ws1 = call i1 @fn_is_ws(i8 %c1)\0A\00" +@.str1305 = private unnamed_addr constant [41 x i8] c" br i1 %ws1, label %rdec, label %build\0A\00" +@.str1306 = private unnamed_addr constant [7 x i8] c"rdec:\0A\00" +@.str1307 = private unnamed_addr constant [27 x i8] c" store i64 %em1, ptr %ep\0A\00" +@.str1308 = private unnamed_addr constant [19 x i8] c" br label %rcond\0A\00" +@.str1309 = private unnamed_addr constant [8 x i8] c"build:\0A\00" +@.str1310 = private unnamed_addr constant [27 x i8] c" %st = load i64, ptr %sp\0A\00" +@.str1311 = private unnamed_addr constant [27 x i8] c" %en = load i64, ptr %ep\0A\00" +@.str1312 = private unnamed_addr constant [27 x i8] c" %len = sub i64 %en, %st\0A\00" +@.str1313 = private unnamed_addr constant [25 x i8] c" %sz = add i64 %len, 1\0A\00" +@.str1314 = private unnamed_addr constant [36 x i8] c" %out = call ptr @malloc(i64 %sz)\0A\00" +@.str1315 = private unnamed_addr constant [44 x i8] c" %src = getelementptr i8, ptr %s, i64 %st\0A\00" +@.str1316 = private unnamed_addr constant [50 x i8] c" call ptr @memcpy(ptr %out, ptr %src, i64 %len)\0A\00" +@.str1317 = private unnamed_addr constant [46 x i8] c" %tp = getelementptr i8, ptr %out, i64 %len\0A\00" +@.str1318 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1319 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1320 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1321 = private unnamed_addr constant [30 x i8] c"define i1 @fn_is_ws(i8 %c) {\0A\00" +@.str1322 = private unnamed_addr constant [26 x i8] c" %a = icmp eq i8 %c, 32\0A\00" +@.str1323 = private unnamed_addr constant [25 x i8] c" %b = icmp eq i8 %c, 9\0A\00" +@.str1324 = private unnamed_addr constant [26 x i8] c" %d = icmp eq i8 %c, 10\0A\00" +@.str1325 = private unnamed_addr constant [26 x i8] c" %e = icmp eq i8 %c, 13\0A\00" +@.str1326 = private unnamed_addr constant [22 x i8] c" %ab = or i1 %a, %b\0A\00" +@.str1327 = private unnamed_addr constant [22 x i8] c" %de = or i1 %d, %e\0A\00" +@.str1328 = private unnamed_addr constant [23 x i8] c" %r = or i1 %ab, %de\0A\00" +@.str1329 = private unnamed_addr constant [13 x i8] c" ret i1 %r\0A\00" +@.str1330 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1331 = private unnamed_addr constant [47 x i8] c"define ptr @fn_str_repeat(ptr %s, i32 %n32) {\0A\00" +@.str1332 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1333 = private unnamed_addr constant [32 x i8] c" %nneg = icmp slt i32 %n32, 0\0A\00" +@.str1334 = private unnamed_addr constant [42 x i8] c" %nn = select i1 %nneg, i32 0, i32 %n32\0A\00" +@.str1335 = private unnamed_addr constant [28 x i8] c" %n = zext i32 %nn to i64\0A\00" +@.str1336 = private unnamed_addr constant [33 x i8] c" %L = call i64 @strlen(ptr %s)\0A\00" +@.str1337 = private unnamed_addr constant [25 x i8] c" %tot = mul i64 %L, %n\0A\00" +@.str1338 = private unnamed_addr constant [25 x i8] c" %sz = add i64 %tot, 1\0A\00" +@.str1339 = private unnamed_addr constant [36 x i8] c" %out = call ptr @malloc(i64 %sz)\0A\00" +@.str1340 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1341 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1342 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1343 = private unnamed_addr constant [7 x i8] c"cond:\0A\00" +@.str1344 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1345 = private unnamed_addr constant [28 x i8] c" %d = icmp ult i64 %i, %n\0A\00" +@.str1346 = private unnamed_addr constant [37 x i8] c" br i1 %d, label %body, label %fin\0A\00" +@.str1347 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1348 = private unnamed_addr constant [25 x i8] c" %off = mul i64 %i, %L\0A\00" +@.str1349 = private unnamed_addr constant [47 x i8] c" %dst = getelementptr i8, ptr %out, i64 %off\0A\00" +@.str1350 = private unnamed_addr constant [46 x i8] c" call ptr @memcpy(ptr %dst, ptr %s, i64 %L)\0A\00" +@.str1351 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1352 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1353 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1354 = private unnamed_addr constant [6 x i8] c"fin:\0A\00" +@.str1355 = private unnamed_addr constant [46 x i8] c" %tp = getelementptr i8, ptr %out, i64 %tot\0A\00" +@.str1356 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1357 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1358 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1359 = private unnamed_addr constant [54 x i8] c"define ptr @fn_str_pad(ptr %s, i32 %w32, i1 %left) {\0A\00" +@.str1360 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1361 = private unnamed_addr constant [33 x i8] c" %L = call i64 @strlen(ptr %s)\0A\00" +@.str1362 = private unnamed_addr constant [30 x i8] c" %w0 = sext i32 %w32 to i64\0A\00" +@.str1363 = private unnamed_addr constant [32 x i8] c" %need = icmp ugt i64 %w0, %L\0A\00" +@.str1364 = private unnamed_addr constant [39 x i8] c" br i1 %need, label %do, label %copy\0A\00" +@.str1365 = private unnamed_addr constant [7 x i8] c"copy:\0A\00" +@.str1366 = private unnamed_addr constant [24 x i8] c" %sz0 = add i64 %L, 1\0A\00" +@.str1367 = private unnamed_addr constant [36 x i8] c" %o0 = call ptr @malloc(i64 %sz0)\0A\00" +@.str1368 = private unnamed_addr constant [23 x i8] c" %e0 = add i64 %L, 0\0A\00" +@.str1369 = private unnamed_addr constant [45 x i8] c" call ptr @memcpy(ptr %o0, ptr %s, i64 %L)\0A\00" +@.str1370 = private unnamed_addr constant [43 x i8] c" %t0 = getelementptr i8, ptr %o0, i64 %L\0A\00" +@.str1371 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %t0\0A\00" +@.str1372 = private unnamed_addr constant [15 x i8] c" ret ptr %o0\0A\00" +@.str1373 = private unnamed_addr constant [5 x i8] c"do:\0A\00" +@.str1374 = private unnamed_addr constant [26 x i8] c" %pad = sub i64 %w0, %L\0A\00" +@.str1375 = private unnamed_addr constant [24 x i8] c" %sz = add i64 %w0, 1\0A\00" +@.str1376 = private unnamed_addr constant [36 x i8] c" %out = call ptr @malloc(i64 %sz)\0A\00" +@.str1377 = private unnamed_addr constant [48 x i8] c" br i1 %left, label %padleft, label %padright\0A\00" +@.str1378 = private unnamed_addr constant [10 x i8] c"padleft:\0A\00" +@.str1379 = private unnamed_addr constant [52 x i8] c" call void @fn_fill_sp(ptr %out, i64 0, i64 %pad)\0A\00" +@.str1380 = private unnamed_addr constant [48 x i8] c" %dstL = getelementptr i8, ptr %out, i64 %pad\0A\00" +@.str1381 = private unnamed_addr constant [47 x i8] c" call ptr @memcpy(ptr %dstL, ptr %s, i64 %L)\0A\00" +@.str1382 = private unnamed_addr constant [18 x i8] c" br label %term\0A\00" +@.str1383 = private unnamed_addr constant [11 x i8] c"padright:\0A\00" +@.str1384 = private unnamed_addr constant [46 x i8] c" call ptr @memcpy(ptr %out, ptr %s, i64 %L)\0A\00" +@.str1385 = private unnamed_addr constant [53 x i8] c" call void @fn_fill_sp(ptr %out, i64 %L, i64 %pad)\0A\00" +@.str1386 = private unnamed_addr constant [18 x i8] c" br label %term\0A\00" +@.str1387 = private unnamed_addr constant [7 x i8] c"term:\0A\00" +@.str1388 = private unnamed_addr constant [45 x i8] c" %tp = getelementptr i8, ptr %out, i64 %w0\0A\00" +@.str1389 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1390 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1391 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1392 = private unnamed_addr constant [61 x i8] c"define void @fn_fill_sp(ptr %buf, i64 %start, i64 %count) {\0A\00" +@.str1393 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1394 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1395 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1396 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1397 = private unnamed_addr constant [7 x i8] c"cond:\0A\00" +@.str1398 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1399 = private unnamed_addr constant [32 x i8] c" %d = icmp ult i64 %i, %count\0A\00" +@.str1400 = private unnamed_addr constant [38 x i8] c" br i1 %d, label %body, label %done\0A\00" +@.str1401 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1402 = private unnamed_addr constant [29 x i8] c" %off = add i64 %start, %i\0A\00" +@.str1403 = private unnamed_addr constant [45 x i8] c" %p = getelementptr i8, ptr %buf, i64 %off\0A\00" +@.str1404 = private unnamed_addr constant [23 x i8] c" store i8 32, ptr %p\0A\00" +@.str1405 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1406 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1407 = private unnamed_addr constant [18 x i8] c" br label %cond\0A\00" +@.str1408 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1409 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str1410 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1411 = private unnamed_addr constant [58 x i8] c"define ptr @fn_str_replace(ptr %s, ptr %from, ptr %to) {\0A\00" +@.str1412 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1413 = private unnamed_addr constant [37 x i8] c" %lf = call i64 @strlen(ptr %from)\0A\00" +@.str1414 = private unnamed_addr constant [28 x i8] c" %lz = icmp eq i64 %lf, 0\0A\00" +@.str1415 = private unnamed_addr constant [42 x i8] c" br i1 %lz, label %copyall, label %scan\0A\00" +@.str1416 = private unnamed_addr constant [10 x i8] c"copyall:\0A\00" +@.str1417 = private unnamed_addr constant [35 x i8] c" %ls0 = call i64 @strlen(ptr %s)\0A\00" +@.str1418 = private unnamed_addr constant [26 x i8] c" %sz0 = add i64 %ls0, 1\0A\00" +@.str1419 = private unnamed_addr constant [36 x i8] c" %o0 = call ptr @malloc(i64 %sz0)\0A\00" +@.str1420 = private unnamed_addr constant [47 x i8] c" call ptr @memcpy(ptr %o0, ptr %s, i64 %sz0)\0A\00" +@.str1421 = private unnamed_addr constant [15 x i8] c" ret ptr %o0\0A\00" +@.str1422 = private unnamed_addr constant [7 x i8] c"scan:\0A\00" +@.str1423 = private unnamed_addr constant [35 x i8] c" %lt = call i64 @strlen(ptr %to)\0A\00" +@.str1424 = private unnamed_addr constant [34 x i8] c" %ls = call i64 @strlen(ptr %s)\0A\00" +@.str1425 = private unnamed_addr constant [22 x i8] c" %cntp = alloca i64\0A\00" +@.str1426 = private unnamed_addr constant [26 x i8] c" store i64 0, ptr %cntp\0A\00" +@.str1427 = private unnamed_addr constant [22 x i8] c" %curp = alloca ptr\0A\00" +@.str1428 = private unnamed_addr constant [27 x i8] c" store ptr %s, ptr %curp\0A\00" +@.str1429 = private unnamed_addr constant [19 x i8] c" br label %ccond\0A\00" +@.str1430 = private unnamed_addr constant [8 x i8] c"ccond:\0A\00" +@.str1431 = private unnamed_addr constant [30 x i8] c" %cur = load ptr, ptr %curp\0A\00" +@.str1432 = private unnamed_addr constant [48 x i8] c" %hit = call ptr @strstr(ptr %cur, ptr %from)\0A\00" +@.str1433 = private unnamed_addr constant [36 x i8] c" %isnull = icmp eq ptr %hit, null\0A\00" +@.str1434 = private unnamed_addr constant [44 x i8] c" br i1 %isnull, label %csize, label %cinc\0A\00" +@.str1435 = private unnamed_addr constant [7 x i8] c"cinc:\0A\00" +@.str1436 = private unnamed_addr constant [29 x i8] c" %c0 = load i64, ptr %cntp\0A\00" +@.str1437 = private unnamed_addr constant [24 x i8] c" %c1 = add i64 %c0, 1\0A\00" +@.str1438 = private unnamed_addr constant [28 x i8] c" store i64 %c1, ptr %cntp\0A\00" +@.str1439 = private unnamed_addr constant [46 x i8] c" %adv = getelementptr i8, ptr %hit, i64 %lf\0A\00" +@.str1440 = private unnamed_addr constant [29 x i8] c" store ptr %adv, ptr %curp\0A\00" +@.str1441 = private unnamed_addr constant [19 x i8] c" br label %ccond\0A\00" +@.str1442 = private unnamed_addr constant [8 x i8] c"csize:\0A\00" +@.str1443 = private unnamed_addr constant [30 x i8] c" %cnt = load i64, ptr %cntp\0A\00" +@.str1444 = private unnamed_addr constant [29 x i8] c" %delta = sub i64 %lt, %lf\0A\00" +@.str1445 = private unnamed_addr constant [32 x i8] c" %grow = mul i64 %cnt, %delta\0A\00" +@.str1446 = private unnamed_addr constant [32 x i8] c" %newlen = add i64 %ls, %grow\0A\00" +@.str1447 = private unnamed_addr constant [29 x i8] c" %osz = add i64 %newlen, 1\0A\00" +@.str1448 = private unnamed_addr constant [37 x i8] c" %out = call ptr @malloc(i64 %osz)\0A\00" +@.str1449 = private unnamed_addr constant [22 x i8] c" %srcp = alloca ptr\0A\00" +@.str1450 = private unnamed_addr constant [27 x i8] c" store ptr %s, ptr %srcp\0A\00" +@.str1451 = private unnamed_addr constant [22 x i8] c" %dstp = alloca ptr\0A\00" +@.str1452 = private unnamed_addr constant [29 x i8] c" store ptr %out, ptr %dstp\0A\00" +@.str1453 = private unnamed_addr constant [19 x i8] c" br label %bcond\0A\00" +@.str1454 = private unnamed_addr constant [8 x i8] c"bcond:\0A\00" +@.str1455 = private unnamed_addr constant [30 x i8] c" %src = load ptr, ptr %srcp\0A\00" +@.str1456 = private unnamed_addr constant [47 x i8] c" %h2 = call ptr @strstr(ptr %src, ptr %from)\0A\00" +@.str1457 = private unnamed_addr constant [31 x i8] c" %n2 = icmp eq ptr %h2, null\0A\00" +@.str1458 = private unnamed_addr constant [38 x i8] c" br i1 %n2, label %tail, label %seg\0A\00" +@.str1459 = private unnamed_addr constant [6 x i8] c"seg:\0A\00" +@.str1460 = private unnamed_addr constant [34 x i8] c" %si = ptrtoint ptr %src to i64\0A\00" +@.str1461 = private unnamed_addr constant [33 x i8] c" %hi = ptrtoint ptr %h2 to i64\0A\00" +@.str1462 = private unnamed_addr constant [30 x i8] c" %seglen = sub i64 %hi, %si\0A\00" +@.str1463 = private unnamed_addr constant [31 x i8] c" %dst0 = load ptr, ptr %dstp\0A\00" +@.str1464 = private unnamed_addr constant [54 x i8] c" call ptr @memcpy(ptr %dst0, ptr %src, i64 %seglen)\0A\00" +@.str1465 = private unnamed_addr constant [52 x i8] c" %dst1 = getelementptr i8, ptr %dst0, i64 %seglen\0A\00" +@.str1466 = private unnamed_addr constant [49 x i8] c" call ptr @memcpy(ptr %dst1, ptr %to, i64 %lt)\0A\00" +@.str1467 = private unnamed_addr constant [48 x i8] c" %dst2 = getelementptr i8, ptr %dst1, i64 %lt\0A\00" +@.str1468 = private unnamed_addr constant [30 x i8] c" store ptr %dst2, ptr %dstp\0A\00" +@.str1469 = private unnamed_addr constant [46 x i8] c" %src2 = getelementptr i8, ptr %h2, i64 %lf\0A\00" +@.str1470 = private unnamed_addr constant [30 x i8] c" store ptr %src2, ptr %srcp\0A\00" +@.str1471 = private unnamed_addr constant [19 x i8] c" br label %bcond\0A\00" +@.str1472 = private unnamed_addr constant [7 x i8] c"tail:\0A\00" +@.str1473 = private unnamed_addr constant [31 x i8] c" %src3 = load ptr, ptr %srcp\0A\00" +@.str1474 = private unnamed_addr constant [38 x i8] c" %rem = call i64 @strlen(ptr %src3)\0A\00" +@.str1475 = private unnamed_addr constant [31 x i8] c" %dst3 = load ptr, ptr %dstp\0A\00" +@.str1476 = private unnamed_addr constant [28 x i8] c" %remp1 = add i64 %rem, 1\0A\00" +@.str1477 = private unnamed_addr constant [54 x i8] c" call ptr @memcpy(ptr %dst3, ptr %src3, i64 %remp1)\0A\00" +@.str1478 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1479 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1480 = private unnamed_addr constant [45 x i8] c"define ptr @fn_str_join(ptr %h, ptr %sep) {\0A\00" +@.str1481 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1482 = private unnamed_addr constant [62 x i8] c" %lp = getelementptr inbounds %LSlice, ptr %h, i32 0, i32 1\0A\00" +@.str1483 = private unnamed_addr constant [30 x i8] c" %len32 = load i32, ptr %lp\0A\00" +@.str1484 = private unnamed_addr constant [33 x i8] c" %len = sext i32 %len32 to i64\0A\00" +@.str1485 = private unnamed_addr constant [62 x i8] c" %dp = getelementptr inbounds %LSlice, ptr %h, i32 0, i32 0\0A\00" +@.str1486 = private unnamed_addr constant [29 x i8] c" %data = load ptr, ptr %dp\0A\00" +@.str1487 = private unnamed_addr constant [38 x i8] c" %lsep = call i64 @strlen(ptr %sep)\0A\00" +@.str1488 = private unnamed_addr constant [22 x i8] c" %totp = alloca i64\0A\00" +@.str1489 = private unnamed_addr constant [26 x i8] c" store i64 0, ptr %totp\0A\00" +@.str1490 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1491 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1492 = private unnamed_addr constant [19 x i8] c" br label %scond\0A\00" +@.str1493 = private unnamed_addr constant [8 x i8] c"scond:\0A\00" +@.str1494 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1495 = private unnamed_addr constant [30 x i8] c" %d = icmp ult i64 %i, %len\0A\00" +@.str1496 = private unnamed_addr constant [40 x i8] c" br i1 %d, label %sbody, label %alloc\0A\00" +@.str1497 = private unnamed_addr constant [8 x i8] c"sbody:\0A\00" +@.str1498 = private unnamed_addr constant [46 x i8] c" %ep = getelementptr ptr, ptr %data, i64 %i\0A\00" +@.str1499 = private unnamed_addr constant [27 x i8] c" %es = load ptr, ptr %ep\0A\00" +@.str1500 = private unnamed_addr constant [35 x i8] c" %el = call i64 @strlen(ptr %es)\0A\00" +@.str1501 = private unnamed_addr constant [29 x i8] c" %t0 = load i64, ptr %totp\0A\00" +@.str1502 = private unnamed_addr constant [26 x i8] c" %t1 = add i64 %t0, %el\0A\00" +@.str1503 = private unnamed_addr constant [28 x i8] c" store i64 %t1, ptr %totp\0A\00" +@.str1504 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1505 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1506 = private unnamed_addr constant [19 x i8] c" br label %scond\0A\00" +@.str1507 = private unnamed_addr constant [8 x i8] c"alloc:\0A\00" +@.str1508 = private unnamed_addr constant [30 x i8] c" %nz = icmp ugt i64 %len, 0\0A\00" +@.str1509 = private unnamed_addr constant [26 x i8] c" %lm1 = sub i64 %len, 1\0A\00" +@.str1510 = private unnamed_addr constant [31 x i8] c" %seps = mul i64 %lm1, %lsep\0A\00" +@.str1511 = private unnamed_addr constant [44 x i8] c" %sepsz = select i1 %nz, i64 %seps, i64 0\0A\00" +@.str1512 = private unnamed_addr constant [31 x i8] c" %tot0 = load i64, ptr %totp\0A\00" +@.str1513 = private unnamed_addr constant [32 x i8] c" %tot = add i64 %tot0, %sepsz\0A\00" +@.str1514 = private unnamed_addr constant [26 x i8] c" %osz = add i64 %tot, 1\0A\00" +@.str1515 = private unnamed_addr constant [37 x i8] c" %out = call ptr @malloc(i64 %osz)\0A\00" +@.str1516 = private unnamed_addr constant [22 x i8] c" %dstp = alloca ptr\0A\00" +@.str1517 = private unnamed_addr constant [29 x i8] c" store ptr %out, ptr %dstp\0A\00" +@.str1518 = private unnamed_addr constant [20 x i8] c" %jp = alloca i64\0A\00" +@.str1519 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %jp\0A\00" +@.str1520 = private unnamed_addr constant [19 x i8] c" br label %jcond\0A\00" +@.str1521 = private unnamed_addr constant [8 x i8] c"jcond:\0A\00" +@.str1522 = private unnamed_addr constant [26 x i8] c" %j = load i64, ptr %jp\0A\00" +@.str1523 = private unnamed_addr constant [31 x i8] c" %d2 = icmp ult i64 %j, %len\0A\00" +@.str1524 = private unnamed_addr constant [40 x i8] c" br i1 %d2, label %jbody, label %jfin\0A\00" +@.str1525 = private unnamed_addr constant [8 x i8] c"jbody:\0A\00" +@.str1526 = private unnamed_addr constant [29 x i8] c" %jnz = icmp ugt i64 %j, 0\0A\00" +@.str1527 = private unnamed_addr constant [43 x i8] c" br i1 %jnz, label %putsep, label %putel\0A\00" +@.str1528 = private unnamed_addr constant [9 x i8] c"putsep:\0A\00" +@.str1529 = private unnamed_addr constant [30 x i8] c" %ds0 = load ptr, ptr %dstp\0A\00" +@.str1530 = private unnamed_addr constant [51 x i8] c" call ptr @memcpy(ptr %ds0, ptr %sep, i64 %lsep)\0A\00" +@.str1531 = private unnamed_addr constant [48 x i8] c" %ds1 = getelementptr i8, ptr %ds0, i64 %lsep\0A\00" +@.str1532 = private unnamed_addr constant [29 x i8] c" store ptr %ds1, ptr %dstp\0A\00" +@.str1533 = private unnamed_addr constant [19 x i8] c" br label %putel\0A\00" +@.str1534 = private unnamed_addr constant [8 x i8] c"putel:\0A\00" +@.str1535 = private unnamed_addr constant [47 x i8] c" %ep2 = getelementptr ptr, ptr %data, i64 %j\0A\00" +@.str1536 = private unnamed_addr constant [29 x i8] c" %es2 = load ptr, ptr %ep2\0A\00" +@.str1537 = private unnamed_addr constant [37 x i8] c" %el2 = call i64 @strlen(ptr %es2)\0A\00" +@.str1538 = private unnamed_addr constant [30 x i8] c" %ds2 = load ptr, ptr %dstp\0A\00" +@.str1539 = private unnamed_addr constant [50 x i8] c" call ptr @memcpy(ptr %ds2, ptr %es2, i64 %el2)\0A\00" +@.str1540 = private unnamed_addr constant [47 x i8] c" %ds3 = getelementptr i8, ptr %ds2, i64 %el2\0A\00" +@.str1541 = private unnamed_addr constant [29 x i8] c" store ptr %ds3, ptr %dstp\0A\00" +@.str1542 = private unnamed_addr constant [23 x i8] c" %j1 = add i64 %j, 1\0A\00" +@.str1543 = private unnamed_addr constant [26 x i8] c" store i64 %j1, ptr %jp\0A\00" +@.str1544 = private unnamed_addr constant [19 x i8] c" br label %jcond\0A\00" +@.str1545 = private unnamed_addr constant [7 x i8] c"jfin:\0A\00" +@.str1546 = private unnamed_addr constant [30 x i8] c" %dsf = load ptr, ptr %dstp\0A\00" +@.str1547 = private unnamed_addr constant [24 x i8] c" store i8 0, ptr %dsf\0A\00" +@.str1548 = private unnamed_addr constant [16 x i8] c" ret ptr %out\0A\00" +@.str1549 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1550 = private unnamed_addr constant [46 x i8] c"define ptr @fn_str_split(ptr %s, ptr %sep) {\0A\00" +@.str1551 = private unnamed_addr constant [8 x i8] c"entry:\0A\00" +@.str1552 = private unnamed_addr constant [38 x i8] c" %lsep = call i64 @strlen(ptr %sep)\0A\00" +@.str1553 = private unnamed_addr constant [22 x i8] c" %cntp = alloca i64\0A\00" +@.str1554 = private unnamed_addr constant [26 x i8] c" store i64 1, ptr %cntp\0A\00" +@.str1555 = private unnamed_addr constant [22 x i8] c" %curp = alloca ptr\0A\00" +@.str1556 = private unnamed_addr constant [27 x i8] c" store ptr %s, ptr %curp\0A\00" +@.str1557 = private unnamed_addr constant [19 x i8] c" br label %ccond\0A\00" +@.str1558 = private unnamed_addr constant [8 x i8] c"ccond:\0A\00" +@.str1559 = private unnamed_addr constant [30 x i8] c" %cur = load ptr, ptr %curp\0A\00" +@.str1560 = private unnamed_addr constant [47 x i8] c" %hit = call ptr @strstr(ptr %cur, ptr %sep)\0A\00" +@.str1561 = private unnamed_addr constant [36 x i8] c" %isnull = icmp eq ptr %hit, null\0A\00" +@.str1562 = private unnamed_addr constant [41 x i8] c" br i1 %isnull, label %mk, label %cinc\0A\00" +@.str1563 = private unnamed_addr constant [7 x i8] c"cinc:\0A\00" +@.str1564 = private unnamed_addr constant [29 x i8] c" %c0 = load i64, ptr %cntp\0A\00" +@.str1565 = private unnamed_addr constant [24 x i8] c" %c1 = add i64 %c0, 1\0A\00" +@.str1566 = private unnamed_addr constant [28 x i8] c" store i64 %c1, ptr %cntp\0A\00" +@.str1567 = private unnamed_addr constant [48 x i8] c" %adv = getelementptr i8, ptr %hit, i64 %lsep\0A\00" +@.str1568 = private unnamed_addr constant [29 x i8] c" store ptr %adv, ptr %curp\0A\00" +@.str1569 = private unnamed_addr constant [19 x i8] c" br label %ccond\0A\00" +@.str1570 = private unnamed_addr constant [5 x i8] c"mk:\0A\00" +@.str1571 = private unnamed_addr constant [30 x i8] c" %cnt = load i64, ptr %cntp\0A\00" +@.str1572 = private unnamed_addr constant [35 x i8] c" %hdr = call ptr @malloc(i64 16)\0A\00" +@.str1573 = private unnamed_addr constant [28 x i8] c" %arrsz = mul i64 %cnt, 8\0A\00" +@.str1574 = private unnamed_addr constant [39 x i8] c" %arr = call ptr @malloc(i64 %arrsz)\0A\00" +@.str1575 = private unnamed_addr constant [64 x i8] c" %d0 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 0\0A\00" +@.str1576 = private unnamed_addr constant [27 x i8] c" store ptr %arr, ptr %d0\0A\00" +@.str1577 = private unnamed_addr constant [34 x i8] c" %cnt32 = trunc i64 %cnt to i32\0A\00" +@.str1578 = private unnamed_addr constant [64 x i8] c" %d1 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 1\0A\00" +@.str1579 = private unnamed_addr constant [29 x i8] c" store i32 %cnt32, ptr %d1\0A\00" +@.str1580 = private unnamed_addr constant [64 x i8] c" %d2 = getelementptr inbounds %LSlice, ptr %hdr, i32 0, i32 2\0A\00" +@.str1581 = private unnamed_addr constant [29 x i8] c" store i32 %cnt32, ptr %d2\0A\00" +@.str1582 = private unnamed_addr constant [22 x i8] c" %srcp = alloca ptr\0A\00" +@.str1583 = private unnamed_addr constant [27 x i8] c" store ptr %s, ptr %srcp\0A\00" +@.str1584 = private unnamed_addr constant [20 x i8] c" %ip = alloca i64\0A\00" +@.str1585 = private unnamed_addr constant [24 x i8] c" store i64 0, ptr %ip\0A\00" +@.str1586 = private unnamed_addr constant [19 x i8] c" br label %fcond\0A\00" +@.str1587 = private unnamed_addr constant [8 x i8] c"fcond:\0A\00" +@.str1588 = private unnamed_addr constant [26 x i8] c" %i = load i64, ptr %ip\0A\00" +@.str1589 = private unnamed_addr constant [31 x i8] c" %lt = icmp ult i64 %i, %cnt\0A\00" +@.str1590 = private unnamed_addr constant [40 x i8] c" br i1 %lt, label %fbody, label %done\0A\00" +@.str1591 = private unnamed_addr constant [8 x i8] c"fbody:\0A\00" +@.str1592 = private unnamed_addr constant [30 x i8] c" %src = load ptr, ptr %srcp\0A\00" +@.str1593 = private unnamed_addr constant [46 x i8] c" %h2 = call ptr @strstr(ptr %src, ptr %sep)\0A\00" +@.str1594 = private unnamed_addr constant [31 x i8] c" %n2 = icmp eq ptr %h2, null\0A\00" +@.str1595 = private unnamed_addr constant [38 x i8] c" br i1 %n2, label %last, label %mid\0A\00" +@.str1596 = private unnamed_addr constant [6 x i8] c"mid:\0A\00" +@.str1597 = private unnamed_addr constant [34 x i8] c" %si = ptrtoint ptr %src to i64\0A\00" +@.str1598 = private unnamed_addr constant [33 x i8] c" %hi = ptrtoint ptr %h2 to i64\0A\00" +@.str1599 = private unnamed_addr constant [30 x i8] c" %seglen = sub i64 %hi, %si\0A\00" +@.str1600 = private unnamed_addr constant [19 x i8] c" br label %store\0A\00" +@.str1601 = private unnamed_addr constant [7 x i8] c"last:\0A\00" +@.str1602 = private unnamed_addr constant [37 x i8] c" %rem = call i64 @strlen(ptr %src)\0A\00" +@.str1603 = private unnamed_addr constant [19 x i8] c" br label %store\0A\00" +@.str1604 = private unnamed_addr constant [8 x i8] c"store:\0A\00" +@.str1605 = private unnamed_addr constant [53 x i8] c" %seg = phi i64 [ %seglen, %mid ], [ %rem, %last ]\0A\00" +@.str1606 = private unnamed_addr constant [26 x i8] c" %ssz = add i64 %seg, 1\0A\00" +@.str1607 = private unnamed_addr constant [37 x i8] c" %sub = call ptr @malloc(i64 %ssz)\0A\00" +@.str1608 = private unnamed_addr constant [31 x i8] c" %src2 = load ptr, ptr %srcp\0A\00" +@.str1609 = private unnamed_addr constant [51 x i8] c" call ptr @memcpy(ptr %sub, ptr %src2, i64 %seg)\0A\00" +@.str1610 = private unnamed_addr constant [46 x i8] c" %tp = getelementptr i8, ptr %sub, i64 %seg\0A\00" +@.str1611 = private unnamed_addr constant [23 x i8] c" store i8 0, ptr %tp\0A\00" +@.str1612 = private unnamed_addr constant [47 x i8] c" %slot = getelementptr ptr, ptr %arr, i64 %i\0A\00" +@.str1613 = private unnamed_addr constant [29 x i8] c" store ptr %sub, ptr %slot\0A\00" +@.str1614 = private unnamed_addr constant [48 x i8] c" %adv2 = getelementptr i8, ptr %h2, i64 %lsep\0A\00" +@.str1615 = private unnamed_addr constant [30 x i8] c" store ptr %adv2, ptr %srcp\0A\00" +@.str1616 = private unnamed_addr constant [23 x i8] c" %i1 = add i64 %i, 1\0A\00" +@.str1617 = private unnamed_addr constant [26 x i8] c" store i64 %i1, ptr %ip\0A\00" +@.str1618 = private unnamed_addr constant [19 x i8] c" br label %fcond\0A\00" +@.str1619 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1620 = private unnamed_addr constant [16 x i8] c" ret ptr %hdr\0A\00" +@.str1621 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1622 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str1623 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str1624 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1625 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1626 = private unnamed_addr constant [4 x i8] c"len\00" +@.str1627 = private unnamed_addr constant [5 x i8] c"push\00" +@.str1628 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str1629 = private unnamed_addr constant [6 x i8] c"first\00" +@.str1630 = private unnamed_addr constant [5 x i8] c"last\00" +@.str1631 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str1632 = private unnamed_addr constant [5 x i8] c"swap\00" +@.str1633 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str1634 = private unnamed_addr constant [9 x i8] c"index_of\00" +@.str1635 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str1636 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str1637 = private unnamed_addr constant [10 x i8] c"remove_at\00" +@.str1638 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str1639 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str1640 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1641 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1642 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str1643 = private unnamed_addr constant [3 x i8] c", \00" +@.str1644 = private unnamed_addr constant [3 x i8] c"ig\00" +@.str1645 = private unnamed_addr constant [4 x i8] c"igd\00" +@.str1646 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1647 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1648 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1649 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1650 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1651 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str1652 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str1653 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1654 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1655 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str1656 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" +@.str1657 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str1658 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str1659 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str1660 = private unnamed_addr constant [3 x i8] c", \00" +@.str1661 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str1662 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str1663 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str1664 = private unnamed_addr constant [2 x i8] c")\00" +@.str1665 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1666 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1667 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1668 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1669 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1670 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1671 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1672 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1673 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1674 = private unnamed_addr constant [4 x i8] c"len\00" +@.str1675 = private unnamed_addr constant [5 x i8] c"push\00" +@.str1676 = private unnamed_addr constant [6 x i8] c"List.\00" +@.str1677 = private unnamed_addr constant [15 x i8] c" needs a slice\00" +@.str1678 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str1679 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str1680 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1681 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1682 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1683 = private unnamed_addr constant [6 x i8] c"first\00" +@.str1684 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1685 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1686 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1687 = private unnamed_addr constant [5 x i8] c"last\00" +@.str1688 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1689 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1690 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1691 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1692 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1693 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str1694 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1695 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1696 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1697 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1698 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1699 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1700 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1701 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1702 = private unnamed_addr constant [5 x i8] c"swap\00" +@.str1703 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1704 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1705 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1706 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1707 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1708 = private unnamed_addr constant [2 x i8] c" \00" +@.str1709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1710 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1711 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1712 = private unnamed_addr constant [2 x i8] c" \00" +@.str1713 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1714 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1715 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1716 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1717 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str1718 = private unnamed_addr constant [9 x i8] c"index_of\00" +@.str1719 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1720 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1721 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1722 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str1723 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1724 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1725 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1726 = private unnamed_addr constant [8 x i8] c"lc_cond\00" +@.str1727 = private unnamed_addr constant [8 x i8] c"lc_body\00" +@.str1728 = private unnamed_addr constant [7 x i8] c"lc_hit\00" +@.str1729 = private unnamed_addr constant [8 x i8] c"lc_next\00" +@.str1730 = private unnamed_addr constant [7 x i8] c"lc_end\00" +@.str1731 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1732 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1733 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1734 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1735 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1736 = private unnamed_addr constant [3 x i8] c", \00" +@.str1737 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1738 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1739 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1740 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1741 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1742 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1743 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1744 = private unnamed_addr constant [9 x i8] c"icmp eq \00" +@.str1745 = private unnamed_addr constant [2 x i8] c" \00" +@.str1746 = private unnamed_addr constant [3 x i8] c", \00" +@.str1747 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1748 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1749 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1750 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1751 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1752 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1753 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1754 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1755 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1756 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1757 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1758 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1759 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1760 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1761 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1762 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1763 = private unnamed_addr constant [9 x i8] c"index_of\00" +@.str1764 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1765 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str1766 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1767 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str1768 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str1769 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str1770 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str1771 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" @.str1772 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1773 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1774 = private unnamed_addr constant [6 x i8] c"qcond\00" -@.str1775 = private unnamed_addr constant [6 x i8] c"qbody\00" -@.str1776 = private unnamed_addr constant [6 x i8] c"qnext\00" -@.str1777 = private unnamed_addr constant [5 x i8] c"qend\00" -@.str1778 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1779 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1780 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1781 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1782 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" -@.str1783 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str1784 = private unnamed_addr constant [3 x i8] c", \00" -@.str1785 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1786 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1787 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1788 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1789 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1790 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1791 = private unnamed_addr constant [3 x i8] c" \00" -@.str1792 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1793 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" -@.str1794 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1795 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1796 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1797 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1798 = private unnamed_addr constant [3 x i8] c"qa\00" -@.str1799 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1800 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1801 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1802 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1803 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1804 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1805 = private unnamed_addr constant [3 x i8] c" \00" -@.str1806 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1807 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str1773 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1774 = private unnamed_addr constant [5 x i8] c"li_c\00" +@.str1775 = private unnamed_addr constant [5 x i8] c"li_b\00" +@.str1776 = private unnamed_addr constant [5 x i8] c"li_e\00" +@.str1777 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1778 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1779 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1780 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1781 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str1782 = private unnamed_addr constant [3 x i8] c", \00" +@.str1783 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1784 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1785 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1786 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1787 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1788 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1789 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1790 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1791 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1792 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1793 = private unnamed_addr constant [2 x i8] c" \00" +@.str1794 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1795 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1796 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1797 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1798 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1799 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1800 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1801 = private unnamed_addr constant [2 x i8] c" \00" +@.str1802 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1803 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1804 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1805 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1806 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1807 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str1808 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1809 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1810 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1811 = private unnamed_addr constant [3 x i8] c", \00" -@.str1812 = private unnamed_addr constant [19 x i8] c"load i32, ptr @ME_\00" -@.str1813 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1814 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1815 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str1816 = private unnamed_addr constant [3 x i8] c", \00" -@.str1817 = private unnamed_addr constant [3 x i8] c" \00" -@.str1818 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1819 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1820 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1809 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1810 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1811 = private unnamed_addr constant [10 x i8] c"remove_at\00" +@.str1812 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1813 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1814 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1815 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1816 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1817 = private unnamed_addr constant [5 x i8] c"lr_c\00" +@.str1818 = private unnamed_addr constant [5 x i8] c"lr_b\00" +@.str1819 = private unnamed_addr constant [5 x i8] c"lr_e\00" +@.str1820 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str1821 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1822 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1823 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" -@.str1824 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1825 = private unnamed_addr constant [3 x i8] c"qt\00" +@.str1822 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1823 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1824 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1825 = private unnamed_addr constant [3 x i8] c", \00" @.str1826 = private unnamed_addr constant [9 x i8] c" br i1 \00" @.str1827 = private unnamed_addr constant [10 x i8] c", label %\00" @.str1828 = private unnamed_addr constant [10 x i8] c", label %\00" @.str1829 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str1830 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1831 = private unnamed_addr constant [3 x i8] c" \00" -@.str1832 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1833 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1834 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1835 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1836 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1837 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1838 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1839 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1840 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1841 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1842 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1843 = private unnamed_addr constant [3 x i8] c"qw\00" -@.str1844 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1845 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1846 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1847 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1848 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1849 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1850 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1851 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1852 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1853 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1854 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1855 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1856 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1857 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1858 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1859 = private unnamed_addr constant [25 x i8] c"spawn: unknown property \00" -@.str1860 = private unnamed_addr constant [3 x i8] c" \00" -@.str1861 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1862 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1863 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1864 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1865 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" -@.str1866 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1867 = private unnamed_addr constant [3 x i8] c" \00" -@.str1868 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1869 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1870 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1871 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1872 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1873 = private unnamed_addr constant [3 x i8] c" \00" -@.str1874 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1875 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1876 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1877 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1878 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1879 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1880 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1881 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1882 = private unnamed_addr constant [2 x i8] c" \00" -@.str1883 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1884 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1885 = private unnamed_addr constant [3 x i8] c" \00" -@.str1886 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1887 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1888 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1831 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1832 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1833 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1834 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1835 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1836 = private unnamed_addr constant [2 x i8] c" \00" +@.str1837 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1838 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1839 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1840 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1841 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1842 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1843 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1844 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1845 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1846 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1847 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1848 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str1849 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1850 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1851 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1852 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str1853 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1854 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1855 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1856 = private unnamed_addr constant [5 x i8] c"lv_c\00" +@.str1857 = private unnamed_addr constant [5 x i8] c"lv_b\00" +@.str1858 = private unnamed_addr constant [5 x i8] c"lv_h\00" +@.str1859 = private unnamed_addr constant [5 x i8] c"lv_n\00" +@.str1860 = private unnamed_addr constant [5 x i8] c"lv_e\00" +@.str1861 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1862 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1863 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1864 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1865 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1866 = private unnamed_addr constant [3 x i8] c", \00" +@.str1867 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1868 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1869 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1870 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str1871 = private unnamed_addr constant [3 x i8] c", \00" +@.str1872 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1873 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1874 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1875 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1876 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1877 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1878 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1879 = private unnamed_addr constant [9 x i8] c"icmp eq \00" +@.str1880 = private unnamed_addr constant [2 x i8] c" \00" +@.str1881 = private unnamed_addr constant [3 x i8] c", \00" +@.str1882 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1883 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1884 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1885 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1886 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1887 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1888 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str1889 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1890 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1891 = private unnamed_addr constant [2 x i8] c" \00" -@.str1892 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1893 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1894 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1895 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1896 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1897 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1898 = private unnamed_addr constant [6 x i8] c"prop_\00" -@.str1899 = private unnamed_addr constant [8 x i8] c"_attach\00" -@.str1900 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str1901 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1902 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1903 = private unnamed_addr constant [3 x i8] c" \00" -@.str1904 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1905 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1906 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1907 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1908 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1909 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1910 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1911 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1912 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1913 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" -@.str1914 = private unnamed_addr constant [3 x i8] c" \00" -@.str1915 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1916 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1917 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1918 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1919 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1920 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1921 = private unnamed_addr constant [7 x i8] c"model_\00" -@.str1922 = private unnamed_addr constant [7 x i8] c"_spawn\00" -@.str1923 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str1924 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1925 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1926 = private unnamed_addr constant [3 x i8] c" \00" -@.str1927 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1928 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1929 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1930 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1931 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1932 = private unnamed_addr constant [3 x i8] c", \00" -@.str1933 = private unnamed_addr constant [3 x i8] c"dh\00" -@.str1934 = private unnamed_addr constant [4 x i8] c"dhn\00" -@.str1935 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1936 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1937 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1938 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1939 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" -@.str1940 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1941 = private unnamed_addr constant [10 x i8] c", i32 0)\0A\00" -@.str1942 = private unnamed_addr constant [7 x i8] c"model_\00" -@.str1943 = private unnamed_addr constant [9 x i8] c"_despawn\00" -@.str1944 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str1945 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1946 = private unnamed_addr constant [10 x i8] c", i32 0)\0A\00" -@.str1947 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1948 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1949 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1950 = private unnamed_addr constant [37 x i8] c" call void @ludic_sweep_entity(i32 \00" -@.str1951 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1952 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" -@.str1953 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1954 = private unnamed_addr constant [3 x i8] c" \00" -@.str1955 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1956 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1957 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1958 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1959 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1960 = private unnamed_addr constant [12 x i8] c"icmp eq i8 \00" -@.str1961 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1962 = private unnamed_addr constant [7 x i8] c"attach\00" -@.str1963 = private unnamed_addr constant [8 x i8] c"attdone\00" -@.str1964 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1965 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1966 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1967 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1968 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1969 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1970 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1971 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1972 = private unnamed_addr constant [3 x i8] c" \00" -@.str1973 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1974 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1975 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1976 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1977 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1978 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" -@.str1979 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1980 = private unnamed_addr constant [7 x i8] c"detach\00" -@.str1981 = private unnamed_addr constant [8 x i8] c"detdone\00" -@.str1982 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1983 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1984 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1985 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1986 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1987 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" -@.str1988 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1989 = private unnamed_addr constant [3 x i8] c" \00" -@.str1990 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1991 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1992 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1993 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1994 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1995 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1996 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1997 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1998 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1999 = private unnamed_addr constant [6 x i8] c"prop_\00" -@.str2000 = private unnamed_addr constant [8 x i8] c"_detach\00" -@.str2001 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str2002 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str2003 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2004 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2005 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2006 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2007 = private unnamed_addr constant [2 x i8] c"0\00" -@.str2008 = private unnamed_addr constant [2 x i8] c"1\00" -@.str2009 = private unnamed_addr constant [6 x i8] c"layer\00" -@.str2010 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2011 = private unnamed_addr constant [11 x i8] c", ptr @LE_\00" -@.str2012 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2013 = private unnamed_addr constant [7 x i8] c"layer_\00" -@.str2014 = private unnamed_addr constant [6 x i8] c"_hide\00" -@.str2015 = private unnamed_addr constant [7 x i8] c"layer_\00" -@.str2016 = private unnamed_addr constant [6 x i8] c"_show\00" -@.str2017 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str2018 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2019 = private unnamed_addr constant [3 x i8] c" \00" -@.str2020 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2021 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str2022 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2023 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2024 = private unnamed_addr constant [12 x i8] c" store i8 \00" -@.str2025 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2026 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2027 = private unnamed_addr constant [3 x i8] c" \00" -@.str2028 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2029 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str2030 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str2031 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2032 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2033 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str2034 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str2035 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2036 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2037 = private unnamed_addr constant [6 x i8] c"prop_\00" -@.str2038 = private unnamed_addr constant [9 x i8] c"_disable\00" -@.str2039 = private unnamed_addr constant [6 x i8] c"prop_\00" -@.str2040 = private unnamed_addr constant [8 x i8] c"_enable\00" -@.str2041 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str2042 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str2043 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2044 = private unnamed_addr constant [5 x i8] c"@HE_\00" -@.str2045 = private unnamed_addr constant [5 x i8] c"@ME_\00" -@.str2046 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1890 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1891 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1892 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1893 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1894 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1895 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1896 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1897 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1898 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str1899 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1900 = private unnamed_addr constant [6 x i8] c"lv_do\00" +@.str1901 = private unnamed_addr constant [7 x i8] c"lv_end\00" +@.str1902 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1903 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1904 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1905 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1906 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1907 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1908 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1909 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1910 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1911 = private unnamed_addr constant [6 x i8] c"lv_dc\00" +@.str1912 = private unnamed_addr constant [6 x i8] c"lv_db\00" +@.str1913 = private unnamed_addr constant [6 x i8] c"lv_de\00" +@.str1914 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1915 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1916 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1917 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1918 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1919 = private unnamed_addr constant [3 x i8] c", \00" +@.str1920 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1921 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1922 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1923 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1924 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1925 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1926 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1927 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1928 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1929 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1930 = private unnamed_addr constant [2 x i8] c" \00" +@.str1931 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1932 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1933 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1934 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1935 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1936 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1937 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1938 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1939 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1940 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1941 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1942 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1943 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1944 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1945 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str1946 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1947 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1948 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1949 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1950 = private unnamed_addr constant [6 x i8] c"ls_oc\00" +@.str1951 = private unnamed_addr constant [6 x i8] c"ls_ob\00" +@.str1952 = private unnamed_addr constant [6 x i8] c"ls_oe\00" +@.str1953 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1954 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1955 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1956 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1957 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1958 = private unnamed_addr constant [3 x i8] c", \00" +@.str1959 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1960 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1961 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1962 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1963 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1964 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1965 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1966 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1967 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1968 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1969 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1970 = private unnamed_addr constant [6 x i8] c"ls_ic\00" +@.str1971 = private unnamed_addr constant [6 x i8] c"ls_ib\00" +@.str1972 = private unnamed_addr constant [6 x i8] c"ls_ie\00" +@.str1973 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1974 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1975 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1976 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1977 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str1978 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1979 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1980 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1981 = private unnamed_addr constant [10 x i8] c"icmp sgt \00" +@.str1982 = private unnamed_addr constant [2 x i8] c" \00" +@.str1983 = private unnamed_addr constant [3 x i8] c", \00" +@.str1984 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str1985 = private unnamed_addr constant [3 x i8] c", \00" +@.str1986 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1987 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1988 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1989 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1990 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1991 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1992 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1993 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1994 = private unnamed_addr constant [2 x i8] c" \00" +@.str1995 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1996 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1997 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str1998 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1999 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2000 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2001 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2002 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2003 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2004 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2005 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2006 = private unnamed_addr constant [9 x i8] c" store \00" +@.str2007 = private unnamed_addr constant [2 x i8] c" \00" +@.str2008 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2009 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2010 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2011 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2012 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2013 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2014 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2015 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2016 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2017 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2018 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2019 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2020 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2021 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2022 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2023 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2024 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2025 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2026 = private unnamed_addr constant [8 x i8] c"lr_cond\00" +@.str2027 = private unnamed_addr constant [8 x i8] c"lr_body\00" +@.str2028 = private unnamed_addr constant [7 x i8] c"lr_end\00" +@.str2029 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2030 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2031 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2032 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2033 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2034 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2035 = private unnamed_addr constant [3 x i8] c", \00" +@.str2036 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str2037 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2038 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2039 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2040 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2041 = private unnamed_addr constant [6 x i8] c"load \00" +@.str2042 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2043 = private unnamed_addr constant [6 x i8] c"load \00" +@.str2044 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2045 = private unnamed_addr constant [9 x i8] c" store \00" +@.str2046 = private unnamed_addr constant [2 x i8] c" \00" @.str2047 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str2048 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2049 = private unnamed_addr constant [5 x i8] c"void\00" -@.str2050 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str2051 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str2052 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" -@.str2053 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" -@.str2054 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2055 = private unnamed_addr constant [19 x i8] c"load i32, ptr @HE_\00" -@.str2056 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str2057 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str2058 = private unnamed_addr constant [19 x i8] c"load i32, ptr @LE_\00" -@.str2059 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str2060 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str2061 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str2062 = private unnamed_addr constant [3 x i8] c", \00" -@.str2063 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_role\00" -@.str2064 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str2065 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str2066 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str2067 = private unnamed_addr constant [3 x i8] c", \00" -@.str2068 = private unnamed_addr constant [5 x i8] c"hrun\00" -@.str2069 = private unnamed_addr constant [6 x i8] c"hskip\00" -@.str2070 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2071 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2072 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2073 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2074 = private unnamed_addr constant [20 x i8] c":\0A call void @sys_\00" -@.str2075 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2076 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2077 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2078 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2079 = private unnamed_addr constant [23 x i8] c"load i32, ptr @L_scene\00" -@.str2080 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str2049 = private unnamed_addr constant [9 x i8] c" store \00" +@.str2050 = private unnamed_addr constant [2 x i8] c" \00" +@.str2051 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2052 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2053 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2054 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2055 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2056 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2057 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2058 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2059 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2060 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2061 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2062 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2063 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2064 = private unnamed_addr constant [3 x i8] c"in\00" +@.str2065 = private unnamed_addr constant [4 x i8] c"out\00" +@.str2066 = private unnamed_addr constant [7 x i8] c"in_out\00" +@.str2067 = private unnamed_addr constant [5 x i8] c"back\00" +@.str2068 = private unnamed_addr constant [7 x i8] c"bounce\00" +@.str2069 = private unnamed_addr constant [7 x i8] c"495616\00" +@.str2070 = private unnamed_addr constant [3 x i8] c"in\00" +@.str2071 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2072 = private unnamed_addr constant [4 x i8] c"out\00" +@.str2073 = private unnamed_addr constant [17 x i8] c"sub i32 131072, \00" +@.str2074 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2075 = private unnamed_addr constant [7 x i8] c"in_out\00" +@.str2076 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2077 = private unnamed_addr constant [4 x i8] c", 3\00" +@.str2078 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2079 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str2080 = private unnamed_addr constant [9 x i8] c"sub i32 \00" @.str2081 = private unnamed_addr constant [3 x i8] c", \00" -@.str2082 = private unnamed_addr constant [6 x i8] c"scrun\00" -@.str2083 = private unnamed_addr constant [7 x i8] c"scskip\00" -@.str2084 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2085 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2086 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2087 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2088 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2089 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2090 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2091 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2092 = private unnamed_addr constant [5 x i8] c"void\00" -@.str2093 = private unnamed_addr constant [7 x i8] c"scene_\00" -@.str2094 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2095 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str2096 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2097 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str2098 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str2099 = private unnamed_addr constant [20 x i8] c"define void @scene_\00" -@.str2100 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2101 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" -@.str2102 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2103 = private unnamed_addr constant [6 x i8] c"enter\00" -@.str2104 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str2105 = private unnamed_addr constant [5 x i8] c"void\00" -@.str2106 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str2107 = private unnamed_addr constant [26 x i8] c" store i32 %reason, ptr \00" -@.str2108 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2109 = private unnamed_addr constant [4 x i8] c"int\00" -@.str2110 = private unnamed_addr constant [3 x i8] c"%e\00" -@.str2111 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str2112 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str2113 = private unnamed_addr constant [25 x i8] c"define void @on_despawn_\00" -@.str2114 = private unnamed_addr constant [32 x i8] c"(i32 %e, i32 %reason) {\0Aentry:\0A\00" -@.str2115 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2116 = private unnamed_addr constant [67 x i8] c"define void @L_despawn_all(i32 %reason) {\0Aentry:\0A br label %loop\0A\00" -@.str2117 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\0A\00" -@.str2118 = private unnamed_addr constant [58 x i8] c" %n = load i32, ptr @L_entc\0A %go = icmp slt i32 %i, %n\0A\00" -@.str2119 = private unnamed_addr constant [38 x i8] c" br i1 %go, label %body, label %fin\0A\00" -@.str2120 = private unnamed_addr constant [39 x i8] c"body:\0A %ap = getelementptr inbounds [\00" -@.str2121 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %i\0A\00" -@.str2122 = private unnamed_addr constant [55 x i8] c" %al = load i32, ptr %ap\0A %isa = icmp ne i32 %al, 0\0A\00" -@.str2123 = private unnamed_addr constant [38 x i8] c" br i1 %isa, label %do, label %cont\0A\00" -@.str2124 = private unnamed_addr constant [37 x i8] c"do:\0A %kp = getelementptr inbounds [\00" -@.str2125 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %i\0A\00" -@.str2126 = private unnamed_addr constant [26 x i8] c" %k = load i32, ptr %kp\0A\00" -@.str2127 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2128 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" -@.str2129 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2130 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" -@.str2131 = private unnamed_addr constant [13 x i8] c", label %hit\00" -@.str2132 = private unnamed_addr constant [14 x i8] c", label %next\00" -@.str2133 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2134 = private unnamed_addr constant [4 x i8] c"hit\00" -@.str2135 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" -@.str2136 = private unnamed_addr constant [23 x i8] c"(i32 %i, i32 %reason)\0A\00" -@.str2137 = private unnamed_addr constant [7 x i8] c"model_\00" -@.str2138 = private unnamed_addr constant [9 x i8] c"_despawn\00" -@.str2139 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str2140 = private unnamed_addr constant [23 x i8] c"(i32 %i, i32 %reason)\0A\00" -@.str2141 = private unnamed_addr constant [17 x i8] c" br label %next\00" -@.str2142 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2143 = private unnamed_addr constant [5 x i8] c"next\00" -@.str2144 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2145 = private unnamed_addr constant [18 x i8] c" br label %cont\0A\00" -@.str2146 = private unnamed_addr constant [46 x i8] c"cont:\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" -@.str2147 = private unnamed_addr constant [20 x i8] c"fin:\0A ret void\0A}\0A\0A\00" -@.str2148 = private unnamed_addr constant [26 x i8] c"@ev_depth = global i32 0\0A\00" -@.str2149 = private unnamed_addr constant [5 x i8] c"%Ev_\00" -@.str2150 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str2082 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2083 = private unnamed_addr constant [5 x i8] c"back\00" +@.str2084 = private unnamed_addr constant [7 x i8] c"177051\00" +@.str2085 = private unnamed_addr constant [7 x i8] c"111515\00" +@.str2086 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2087 = private unnamed_addr constant [3 x i8] c", \00" +@.str2088 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2089 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2090 = private unnamed_addr constant [8 x i8] c", 35747\00" +@.str2091 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2092 = private unnamed_addr constant [8 x i8] c", 49152\00" +@.str2093 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2094 = private unnamed_addr constant [8 x i8] c", 53620\00" +@.str2095 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2096 = private unnamed_addr constant [8 x i8] c", 61440\00" +@.str2097 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2098 = private unnamed_addr constant [8 x i8] c", 62557\00" +@.str2099 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2100 = private unnamed_addr constant [8 x i8] c", 64512\00" +@.str2101 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2102 = private unnamed_addr constant [8 x i8] c", 59578\00" +@.str2103 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2104 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2105 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2106 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2107 = private unnamed_addr constant [8 x i8] c", 47663\00" +@.str2108 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2109 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2110 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2111 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2112 = private unnamed_addr constant [8 x i8] c", 23831\00" +@.str2113 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2114 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2115 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2116 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2117 = private unnamed_addr constant [6 x i8] c"rects\00" +@.str2118 = private unnamed_addr constant [11 x i8] c"point_rect\00" +@.str2119 = private unnamed_addr constant [8 x i8] c"circles\00" +@.str2120 = private unnamed_addr constant [12 x i8] c"rect_circle\00" +@.str2121 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2122 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2123 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2124 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2125 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2126 = private unnamed_addr constant [3 x i8] c", \00" +@.str2127 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2128 = private unnamed_addr constant [3 x i8] c", \00" +@.str2129 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str2130 = private unnamed_addr constant [3 x i8] c", \00" +@.str2131 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2132 = private unnamed_addr constant [3 x i8] c", \00" +@.str2133 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2134 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2135 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2136 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str2137 = private unnamed_addr constant [3 x i8] c", \00" +@.str2138 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2139 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2140 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2141 = private unnamed_addr constant [6 x i8] c"rects\00" +@.str2142 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2143 = private unnamed_addr constant [3 x i8] c", \00" +@.str2144 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2145 = private unnamed_addr constant [3 x i8] c", \00" +@.str2146 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2147 = private unnamed_addr constant [3 x i8] c", \00" +@.str2148 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2149 = private unnamed_addr constant [3 x i8] c", \00" +@.str2150 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" @.str2151 = private unnamed_addr constant [3 x i8] c", \00" -@.str2152 = private unnamed_addr constant [3 x i8] c", \00" -@.str2153 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str2154 = private unnamed_addr constant [4 x i8] c" }\0A\00" -@.str2155 = private unnamed_addr constant [6 x i8] c"@evL_\00" -@.str2156 = private unnamed_addr constant [12 x i8] c" = global [\00" -@.str2157 = private unnamed_addr constant [25 x i8] c" x ptr] zeroinitializer\0A\00" -@.str2158 = private unnamed_addr constant [6 x i8] c"@evN_\00" -@.str2159 = private unnamed_addr constant [17 x i8] c" = global i32 0\0A\00" -@.str2160 = private unnamed_addr constant [6 x i8] c"@evO_\00" -@.str2161 = private unnamed_addr constant [12 x i8] c" = global [\00" -@.str2162 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str2163 = private unnamed_addr constant [22 x i8] c"define i32 @ludic_on_\00" -@.str2164 = private unnamed_addr constant [20 x i8] c"(ptr %cb) {\0Aentry:\0A\00" -@.str2165 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" -@.str2166 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2167 = private unnamed_addr constant [28 x i8] c" %full = icmp slt i32 %n, \00" -@.str2168 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2169 = private unnamed_addr constant [40 x i8] c" br i1 %full, label %add, label %drop\0A\00" -@.str2170 = private unnamed_addr constant [40 x i8] c"add:\0A %slot = getelementptr inbounds [\00" -@.str2171 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" -@.str2172 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" -@.str2173 = private unnamed_addr constant [28 x i8] c" store ptr %cb, ptr %slot\0A\00" -@.str2174 = private unnamed_addr constant [36 x i8] c" %oslot = getelementptr inbounds [\00" -@.str2175 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" -@.str2176 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" -@.str2177 = private unnamed_addr constant [28 x i8] c" store i32 -1, ptr %oslot\0A\00" -@.str2178 = private unnamed_addr constant [49 x i8] c" %n1 = add i32 %n, 1\0A store i32 %n1, ptr @evN_\00" -@.str2179 = private unnamed_addr constant [15 x i8] c"\0A ret i32 %n\0A\00" -@.str2180 = private unnamed_addr constant [23 x i8] c"drop:\0A ret i32 -1\0A}\0A\0A\00" -@.str2181 = private unnamed_addr constant [29 x i8] c"define i32 @ludic_on_entity_\00" -@.str2182 = private unnamed_addr constant [32 x i8] c"(i32 %owner, ptr %cb) {\0Aentry:\0A\00" -@.str2183 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" -@.str2184 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2185 = private unnamed_addr constant [28 x i8] c" %full = icmp slt i32 %n, \00" -@.str2186 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2187 = private unnamed_addr constant [40 x i8] c" br i1 %full, label %add, label %drop\0A\00" -@.str2188 = private unnamed_addr constant [40 x i8] c"add:\0A %slot = getelementptr inbounds [\00" -@.str2189 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" -@.str2190 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" -@.str2191 = private unnamed_addr constant [28 x i8] c" store ptr %cb, ptr %slot\0A\00" -@.str2192 = private unnamed_addr constant [36 x i8] c" %oslot = getelementptr inbounds [\00" -@.str2193 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" -@.str2194 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" -@.str2195 = private unnamed_addr constant [32 x i8] c" store i32 %owner, ptr %oslot\0A\00" -@.str2196 = private unnamed_addr constant [49 x i8] c" %n1 = add i32 %n, 1\0A store i32 %n1, ptr @evN_\00" -@.str2197 = private unnamed_addr constant [15 x i8] c"\0A ret i32 %n\0A\00" -@.str2198 = private unnamed_addr constant [23 x i8] c"drop:\0A ret i32 -1\0A}\0A\0A\00" -@.str2199 = private unnamed_addr constant [24 x i8] c"define void @ludic_off_\00" -@.str2200 = private unnamed_addr constant [21 x i8] c"(i32 %tok) {\0Aentry:\0A\00" -@.str2201 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" -@.str2202 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2203 = private unnamed_addr constant [84 x i8] c" %lo = icmp sge i32 %tok, 0\0A %hi = icmp slt i32 %tok, %n\0A %ok = and i1 %lo, %hi\0A\00" -@.str2204 = private unnamed_addr constant [37 x i8] c" br i1 %ok, label %do, label %skip\0A\00" -@.str2205 = private unnamed_addr constant [39 x i8] c"do:\0A %slot = getelementptr inbounds [\00" -@.str2206 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" -@.str2207 = private unnamed_addr constant [19 x i8] c", i32 0, i32 %tok\0A\00" -@.str2208 = private unnamed_addr constant [46 x i8] c" store ptr null, ptr %slot\0A br label %skip\0A\00" -@.str2209 = private unnamed_addr constant [21 x i8] c"skip:\0A ret void\0A}\0A\0A\00" -@.str2210 = private unnamed_addr constant [5 x i8] c"void\00" -@.str2211 = private unnamed_addr constant [34 x i8] c" %evd = load i32, ptr @ev_depth\0A\00" -@.str2212 = private unnamed_addr constant [32 x i8] c" %evover = icmp sge i32 %evd, \00" -@.str2213 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2214 = private unnamed_addr constant [44 x i8] c" br i1 %evover, label %evcap, label %evgo\0A\00" -@.str2215 = private unnamed_addr constant [8 x i8] c"evcap:\0A\00" -@.str2216 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" -@.str2217 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str2218 = private unnamed_addr constant [7 x i8] c"evgo:\0A\00" -@.str2219 = private unnamed_addr constant [60 x i8] c" %evd1 = add i32 %evd, 1\0A store i32 %evd1, ptr @ev_depth\0A\00" -@.str2220 = private unnamed_addr constant [5 x i8] c"%Ev_\00" -@.str2221 = private unnamed_addr constant [3 x i8] c" \00" -@.str2222 = private unnamed_addr constant [31 x i8] c" = getelementptr inbounds %Ev_\00" -@.str2223 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2224 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2225 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2226 = private unnamed_addr constant [9 x i8] c" store \00" -@.str2227 = private unnamed_addr constant [4 x i8] c" %p\00" -@.str2228 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2229 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2230 = private unnamed_addr constant [9 x i8] c" store \00" -@.str2231 = private unnamed_addr constant [4 x i8] c" %p\00" -@.str2232 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2233 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2234 = private unnamed_addr constant [3 x i8] c" \00" -@.str2235 = private unnamed_addr constant [31 x i8] c" = getelementptr inbounds %Ev_\00" -@.str2236 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2237 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2238 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2239 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str2240 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2241 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str2242 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str2243 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2244 = private unnamed_addr constant [4 x i8] c"evl\00" -@.str2245 = private unnamed_addr constant [4 x i8] c"evb\00" -@.str2246 = private unnamed_addr constant [4 x i8] c"evd\00" -@.str2247 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2248 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2249 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2250 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str2251 = private unnamed_addr constant [20 x i8] c"load i32, ptr @evN_\00" -@.str2252 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str2253 = private unnamed_addr constant [3 x i8] c", \00" -@.str2254 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2255 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2256 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2257 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2258 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2259 = private unnamed_addr constant [3 x i8] c" \00" -@.str2260 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2261 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" -@.str2262 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2263 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2264 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str2265 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" -@.str2266 = private unnamed_addr constant [7 x i8] c", null\00" -@.str2267 = private unnamed_addr constant [5 x i8] c"evdo\00" -@.str2268 = private unnamed_addr constant [5 x i8] c"evsk\00" -@.str2269 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2270 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2271 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2272 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2273 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2274 = private unnamed_addr constant [13 x i8] c" call void \00" -@.str2275 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str2276 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2277 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2278 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2279 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2280 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str2281 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str2282 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2283 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2284 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2285 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2286 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2287 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2288 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str2289 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str2290 = private unnamed_addr constant [97 x i8] c" %evdd = load i32, ptr @ev_depth\0A %evdd1 = sub i32 %evdd, 1\0A store i32 %evdd1, ptr @ev_depth\0A\00" -@.str2291 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str2292 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str2293 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2294 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str2295 = private unnamed_addr constant [5 x i8] c"void\00" -@.str2296 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str2297 = private unnamed_addr constant [8 x i8] c"define \00" -@.str2298 = private unnamed_addr constant [6 x i8] c" @ev_\00" -@.str2299 = private unnamed_addr constant [2 x i8] c"(\00" -@.str2300 = private unnamed_addr constant [3 x i8] c", \00" -@.str2301 = private unnamed_addr constant [4 x i8] c" %p\00" -@.str2302 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" -@.str2303 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2304 = private unnamed_addr constant [112 x i8] c"define void @ludic_sweep_entity(i32 %owner) {\0Aentry:\0A %ci = alloca i32\0A store i32 0, ptr %ci\0A br label %sw0\0A\00" -@.str2305 = private unnamed_addr constant [3 x i8] c"sw\00" -@.str2306 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2307 = private unnamed_addr constant [7 x i8] c" %swi\00" -@.str2308 = private unnamed_addr constant [22 x i8] c" = load i32, ptr %ci\0A\00" -@.str2309 = private unnamed_addr constant [7 x i8] c" %swn\00" -@.str2310 = private unnamed_addr constant [23 x i8] c" = load i32, ptr @evN_\00" -@.str2311 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2312 = private unnamed_addr constant [7 x i8] c" %swg\00" -@.str2313 = private unnamed_addr constant [21 x i8] c" = icmp slt i32 %swi\00" -@.str2314 = private unnamed_addr constant [7 x i8] c", %swn\00" -@.str2315 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2316 = private unnamed_addr constant [13 x i8] c" br i1 %swg\00" -@.str2317 = private unnamed_addr constant [13 x i8] c", label %swb\00" -@.str2318 = private unnamed_addr constant [13 x i8] c", label %swd\00" -@.str2319 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2320 = private unnamed_addr constant [4 x i8] c"swb\00" -@.str2321 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2322 = private unnamed_addr constant [8 x i8] c" %swop\00" -@.str2323 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2324 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" -@.str2325 = private unnamed_addr constant [18 x i8] c", i32 0, i32 %swi\00" -@.str2326 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2327 = private unnamed_addr constant [8 x i8] c" %swov\00" -@.str2328 = private unnamed_addr constant [23 x i8] c" = load i32, ptr %swop\00" -@.str2329 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2330 = private unnamed_addr constant [7 x i8] c" %swm\00" -@.str2331 = private unnamed_addr constant [21 x i8] c" = icmp eq i32 %swov\00" -@.str2332 = private unnamed_addr constant [10 x i8] c", %owner\0A\00" -@.str2333 = private unnamed_addr constant [13 x i8] c" br i1 %swm\00" -@.str2334 = private unnamed_addr constant [13 x i8] c", label %swh\00" -@.str2335 = private unnamed_addr constant [13 x i8] c", label %swx\00" -@.str2336 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2337 = private unnamed_addr constant [4 x i8] c"swh\00" -@.str2338 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2339 = private unnamed_addr constant [8 x i8] c" %swlp\00" -@.str2340 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2341 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" -@.str2342 = private unnamed_addr constant [18 x i8] c", i32 0, i32 %swi\00" -@.str2343 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2344 = private unnamed_addr constant [28 x i8] c" store ptr null, ptr %swlp\00" -@.str2345 = private unnamed_addr constant [17 x i8] c"\0A br label %swx\00" -@.str2346 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2347 = private unnamed_addr constant [4 x i8] c"swx\00" -@.str2348 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2349 = private unnamed_addr constant [8 x i8] c" %swi1\00" -@.str2350 = private unnamed_addr constant [16 x i8] c" = add i32 %swi\00" -@.str2351 = private unnamed_addr constant [22 x i8] c", 1\0A store i32 %swi1\00" -@.str2352 = private unnamed_addr constant [25 x i8] c", ptr %ci\0A br label %sw\00" -@.str2353 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2354 = private unnamed_addr constant [4 x i8] c"swd\00" -@.str2355 = private unnamed_addr constant [26 x i8] c":\0A store i32 0, ptr %ci\0A\00" -@.str2356 = private unnamed_addr constant [15 x i8] c" br label %sw\00" -@.str2357 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2358 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str2359 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2360 = private unnamed_addr constant [31 x i8] c"declare i32 @strcmp(ptr, ptr)\0A\00" -@.str2361 = private unnamed_addr constant [27 x i8] c"@dyn_count = global i32 0\0A\00" -@.str2362 = private unnamed_addr constant [43 x i8] c"@dynS = global [32 x ptr] zeroinitializer\0A\00" -@.str2363 = private unnamed_addr constant [43 x i8] c"@dynH = global [32 x ptr] zeroinitializer\0A\00" -@.str2364 = private unnamed_addr constant [43 x i8] c"@dynF = global [32 x i32] zeroinitializer\0A\00" -@.str2365 = private unnamed_addr constant [46 x i8] c"@dynName = global [32 x ptr] zeroinitializer\0A\00" -@.str2366 = private unnamed_addr constant [47 x i8] c"define i32 @ludic_prop_id(ptr %name) {\0Aentry:\0A\00" -@.str2367 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2368 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" -@.str2369 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2370 = private unnamed_addr constant [5 x i8] c" %e\00" -@.str2371 = private unnamed_addr constant [18 x i8] c" = icmp eq i32 %c\00" -@.str2372 = private unnamed_addr constant [5 x i8] c", 0\0A\00" -@.str2373 = private unnamed_addr constant [11 x i8] c" br i1 %e\00" -@.str2374 = private unnamed_addr constant [11 x i8] c", label %h\00" -@.str2375 = private unnamed_addr constant [11 x i8] c", label %n\00" -@.str2376 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2377 = private unnamed_addr constant [2 x i8] c"h\00" -@.str2378 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" -@.str2379 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2380 = private unnamed_addr constant [2 x i8] c"n\00" -@.str2381 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2382 = private unnamed_addr constant [61 x i8] c" %dpi = alloca i32\0A store i32 0, ptr %dpi\0A br label %dpl\0A\00" -@.str2383 = private unnamed_addr constant [135 x i8] c"dpl:\0A %di = load i32, ptr %dpi\0A %dn = load i32, ptr @dyn_count\0A %dg = icmp slt i32 %di, %dn\0A br i1 %dg, label %dpb, label %dpnone\0A\00" -@.str2384 = private unnamed_addr constant [231 x i8] c"dpb:\0A %dnp = getelementptr inbounds [32 x ptr], ptr @dynName, i32 0, i32 %di\0A %dname = load ptr, ptr %dnp\0A %dcmp = call i32 @strcmp(ptr %name, ptr %dname)\0A %deq = icmp eq i32 %dcmp, 0\0A br i1 %deq, label %dphit, label %dpnext\0A\00" -@.str2385 = private unnamed_addr constant [31 x i8] c"dphit:\0A %drid = add i32 %di, \00" -@.str2386 = private unnamed_addr constant [18 x i8] c"\0A ret i32 %drid\0A\00" -@.str2387 = private unnamed_addr constant [76 x i8] c"dpnext:\0A %di1 = add i32 %di, 1\0A store i32 %di1, ptr %dpi\0A br label %dpl\0A\00" -@.str2388 = private unnamed_addr constant [25 x i8] c"dpnone:\0A ret i32 -1\0A}\0A\0A\00" -@.str2389 = private unnamed_addr constant [56 x i8] c"define i32 @ludic_field_id(i32 %p, ptr %name) {\0Aentry:\0A\00" -@.str2390 = private unnamed_addr constant [6 x i8] c" %pm\00" -@.str2391 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" -@.str2392 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2393 = private unnamed_addr constant [12 x i8] c" br i1 %pm\00" -@.str2394 = private unnamed_addr constant [12 x i8] c", label %pk\00" -@.str2395 = private unnamed_addr constant [12 x i8] c", label %pn\00" -@.str2396 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2397 = private unnamed_addr constant [3 x i8] c"pk\00" -@.str2398 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2399 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2400 = private unnamed_addr constant [6 x i8] c" %fc\00" -@.str2401 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" -@.str2402 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2403 = private unnamed_addr constant [6 x i8] c" %fe\00" -@.str2404 = private unnamed_addr constant [19 x i8] c" = icmp eq i32 %fc\00" -@.str2405 = private unnamed_addr constant [5 x i8] c", 0\0A\00" -@.str2406 = private unnamed_addr constant [12 x i8] c" br i1 %fe\00" -@.str2407 = private unnamed_addr constant [12 x i8] c", label %fh\00" -@.str2408 = private unnamed_addr constant [12 x i8] c", label %fn\00" -@.str2409 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2410 = private unnamed_addr constant [3 x i8] c"fh\00" -@.str2411 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" -@.str2412 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2413 = private unnamed_addr constant [3 x i8] c"fn\00" -@.str2414 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2415 = private unnamed_addr constant [14 x i8] c" ret i32 -1\0A\00" -@.str2416 = private unnamed_addr constant [3 x i8] c"pn\00" -@.str2417 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2418 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" -@.str2419 = private unnamed_addr constant [56 x i8] c"define i64 @ludic_get(i32 %e, i32 %p, i32 %f) {\0Aentry:\0A\00" -@.str2420 = private unnamed_addr constant [5 x i8] c" %m\00" -@.str2421 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" -@.str2422 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2423 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" -@.str2424 = private unnamed_addr constant [11 x i8] c", label %g\00" -@.str2425 = private unnamed_addr constant [12 x i8] c", label %gn\00" -@.str2426 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2427 = private unnamed_addr constant [2 x i8] c"g\00" -@.str2428 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2429 = private unnamed_addr constant [5 x i8] c" %s\00" -@.str2430 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2431 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str2432 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str2433 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str2434 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2435 = private unnamed_addr constant [6 x i8] c" %gm\00" -@.str2436 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %f, \00" -@.str2437 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2438 = private unnamed_addr constant [12 x i8] c" br i1 %gm\00" -@.str2439 = private unnamed_addr constant [12 x i8] c", label %gf\00" -@.str2440 = private unnamed_addr constant [12 x i8] c", label %gk\00" -@.str2441 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2442 = private unnamed_addr constant [3 x i8] c"gf\00" -@.str2443 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2444 = private unnamed_addr constant [6 x i8] c" %ga\00" -@.str2445 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str2446 = private unnamed_addr constant [9 x i8] c", ptr %s\00" -@.str2447 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2448 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2449 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str2450 = private unnamed_addr constant [6 x i8] c" %gl\00" -@.str2451 = private unnamed_addr constant [21 x i8] c" = load ptr, ptr %ga\00" -@.str2452 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2453 = private unnamed_addr constant [6 x i8] c" %gr\00" -@.str2454 = private unnamed_addr constant [20 x i8] c" = ptrtoint ptr %gl\00" -@.str2455 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" -@.str2456 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2457 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str2458 = private unnamed_addr constant [6 x i8] c" %gl\00" -@.str2459 = private unnamed_addr constant [20 x i8] c" = load i8, ptr %ga\00" -@.str2460 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2461 = private unnamed_addr constant [6 x i8] c" %gr\00" -@.str2462 = private unnamed_addr constant [15 x i8] c" = zext i8 %gl\00" -@.str2463 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" -@.str2464 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2465 = private unnamed_addr constant [6 x i8] c" %gl\00" -@.str2466 = private unnamed_addr constant [21 x i8] c" = load i32, ptr %ga\00" -@.str2467 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2468 = private unnamed_addr constant [6 x i8] c" %gr\00" -@.str2469 = private unnamed_addr constant [16 x i8] c" = sext i32 %gl\00" -@.str2470 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" -@.str2471 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2472 = private unnamed_addr constant [3 x i8] c"gk\00" -@.str2473 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2474 = private unnamed_addr constant [13 x i8] c" ret i64 0\0A\00" -@.str2475 = private unnamed_addr constant [3 x i8] c"gn\00" -@.str2476 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2477 = private unnamed_addr constant [23 x i8] c" %gdyn = sub i32 %p, \00" -@.str2478 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2479 = private unnamed_addr constant [175 x i8] c" %gdlo = icmp sge i32 %gdyn, 0\0A %gdc = load i32, ptr @dyn_count\0A %gdhi = icmp slt i32 %gdyn, %gdc\0A %gdok = and i1 %gdlo, %gdhi\0A br i1 %gdok, label %gdyng, label %gdnone\0A\00" -@.str2480 = private unnamed_addr constant [110 x i8] c"gdyng:\0A %gsp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %gdyn\0A %gbase = load ptr, ptr %gsp\0A\00" -@.str2481 = private unnamed_addr constant [156 x i8] c" %gfp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %gdyn\0A %gnf = load i32, ptr %gfp\0A %grow = mul i32 %e, %gnf\0A %gidx = add i32 %grow, %f\0A\00" -@.str2482 = private unnamed_addr constant [133 x i8] c" %gaddr = getelementptr inbounds i32, ptr %gbase, i32 %gidx\0A %gv = load i32, ptr %gaddr\0A %gr = sext i32 %gv to i64\0A ret i64 %gr\0A\00" -@.str2483 = private unnamed_addr constant [24 x i8] c"gdnone:\0A ret i64 0\0A}\0A\0A\00" -@.str2484 = private unnamed_addr constant [67 x i8] c"define void @ludic_set(i32 %e, i32 %p, i32 %f, i64 %val) {\0Aentry:\0A\00" -@.str2485 = private unnamed_addr constant [5 x i8] c" %m\00" -@.str2486 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" -@.str2487 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2488 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" -@.str2489 = private unnamed_addr constant [11 x i8] c", label %g\00" -@.str2490 = private unnamed_addr constant [12 x i8] c", label %gn\00" -@.str2491 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2492 = private unnamed_addr constant [2 x i8] c"g\00" -@.str2493 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2494 = private unnamed_addr constant [5 x i8] c" %s\00" -@.str2495 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2496 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str2497 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str2498 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str2499 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2500 = private unnamed_addr constant [6 x i8] c" %sm\00" -@.str2501 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %f, \00" -@.str2502 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2503 = private unnamed_addr constant [12 x i8] c" br i1 %sm\00" -@.str2504 = private unnamed_addr constant [12 x i8] c", label %sf\00" -@.str2505 = private unnamed_addr constant [12 x i8] c", label %sk\00" -@.str2506 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2507 = private unnamed_addr constant [3 x i8] c"sf\00" -@.str2508 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2509 = private unnamed_addr constant [6 x i8] c" %sa\00" -@.str2510 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str2511 = private unnamed_addr constant [9 x i8] c", ptr %s\00" -@.str2512 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2513 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2514 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str2515 = private unnamed_addr constant [6 x i8] c" %sp\00" -@.str2516 = private unnamed_addr constant [29 x i8] c" = inttoptr i64 %val to ptr\0A\00" -@.str2517 = private unnamed_addr constant [16 x i8] c" store ptr %sp\00" -@.str2518 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" -@.str2519 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" -@.str2520 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str2521 = private unnamed_addr constant [6 x i8] c" %sb\00" -@.str2522 = private unnamed_addr constant [25 x i8] c" = trunc i64 %val to i8\0A\00" -@.str2523 = private unnamed_addr constant [15 x i8] c" store i8 %sb\00" -@.str2524 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" -@.str2525 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" -@.str2526 = private unnamed_addr constant [6 x i8] c" %sw\00" -@.str2527 = private unnamed_addr constant [26 x i8] c" = trunc i64 %val to i32\0A\00" -@.str2528 = private unnamed_addr constant [16 x i8] c" store i32 %sw\00" -@.str2529 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" -@.str2530 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" -@.str2531 = private unnamed_addr constant [3 x i8] c"sk\00" -@.str2532 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2533 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str2534 = private unnamed_addr constant [3 x i8] c"gn\00" -@.str2535 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2536 = private unnamed_addr constant [23 x i8] c" %sdyn = sub i32 %p, \00" -@.str2537 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2538 = private unnamed_addr constant [175 x i8] c" %sdlo = icmp sge i32 %sdyn, 0\0A %sdc = load i32, ptr @dyn_count\0A %sdhi = icmp slt i32 %sdyn, %sdc\0A %sdok = and i1 %sdlo, %sdhi\0A br i1 %sdok, label %sdyng, label %sdnone\0A\00" -@.str2539 = private unnamed_addr constant [110 x i8] c"sdyng:\0A %ssp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %sdyn\0A %sbase = load ptr, ptr %ssp\0A\00" -@.str2540 = private unnamed_addr constant [156 x i8] c" %sfp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %sdyn\0A %snf = load i32, ptr %sfp\0A %srow = mul i32 %e, %snf\0A %sidx = add i32 %srow, %f\0A\00" -@.str2541 = private unnamed_addr constant [131 x i8] c" %saddr = getelementptr inbounds i32, ptr %sbase, i32 %sidx\0A %sv = trunc i64 %val to i32\0A store i32 %sv, ptr %saddr\0A ret void\0A\00" -@.str2542 = private unnamed_addr constant [23 x i8] c"sdnone:\0A ret void\0A}\0A\0A\00" -@.str2543 = private unnamed_addr constant [48 x i8] c"define i32 @ludic_has(i32 %e, i32 %p) {\0Aentry:\0A\00" -@.str2544 = private unnamed_addr constant [5 x i8] c" %m\00" -@.str2545 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" -@.str2546 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2547 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" -@.str2548 = private unnamed_addr constant [11 x i8] c", label %g\00" -@.str2549 = private unnamed_addr constant [12 x i8] c", label %gn\00" -@.str2550 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2551 = private unnamed_addr constant [2 x i8] c"g\00" -@.str2552 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2553 = private unnamed_addr constant [6 x i8] c" %hp\00" -@.str2554 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2555 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str2556 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str2557 = private unnamed_addr constant [6 x i8] c" %hv\00" -@.str2558 = private unnamed_addr constant [20 x i8] c" = load i8, ptr %hp\00" -@.str2559 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2560 = private unnamed_addr constant [6 x i8] c" %hr\00" -@.str2561 = private unnamed_addr constant [15 x i8] c" = zext i8 %hv\00" -@.str2562 = private unnamed_addr constant [22 x i8] c" to i32\0A ret i32 %hr\00" -@.str2563 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2564 = private unnamed_addr constant [3 x i8] c"gn\00" -@.str2565 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2566 = private unnamed_addr constant [23 x i8] c" %hdyn = sub i32 %p, \00" -@.str2567 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2568 = private unnamed_addr constant [175 x i8] c" %hdlo = icmp sge i32 %hdyn, 0\0A %hdc = load i32, ptr @dyn_count\0A %hdhi = icmp slt i32 %hdyn, %hdc\0A %hdok = and i1 %hdlo, %hdhi\0A br i1 %hdok, label %hdyng, label %hdnone\0A\00" -@.str2569 = private unnamed_addr constant [238 x i8] c"hdyng:\0A %hhp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %hdyn\0A %hh = load ptr, ptr %hhp\0A %hslot = getelementptr inbounds i8, ptr %hh, i32 %e\0A %hval = load i8, ptr %hslot\0A %hres = zext i8 %hval to i32\0A ret i32 %hres\0A\00" -@.str2570 = private unnamed_addr constant [24 x i8] c"hdnone:\0A ret i32 0\0A}\0A\0A\00" -@.str2571 = private unnamed_addr constant [67 x i8] c"define i32 @ludic_register_prop(ptr %name, i32 %nfields) {\0Aentry:\0A\00" -@.str2572 = private unnamed_addr constant [102 x i8] c" %dc = load i32, ptr @dyn_count\0A %full = icmp slt i32 %dc, 32\0A br i1 %full, label %do, label %rej\0A\00" -@.str2573 = private unnamed_addr constant [56 x i8] c"do:\0A %nf4 = mul i32 %nfields, 4\0A %sz = mul i32 %nf4, \00" -@.str2574 = private unnamed_addr constant [31 x i8] c"\0A %szl = sext i32 %sz to i64\0A\00" -@.str2575 = private unnamed_addr constant [83 x i8] c" %buf = call ptr @malloc(i64 %szl)\0A call ptr @memset(ptr %buf, i32 0, i64 %szl)\0A\00" -@.str2576 = private unnamed_addr constant [96 x i8] c" %sp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %dc\0A store ptr %buf, ptr %sp\0A\00" -@.str2577 = private unnamed_addr constant [32 x i8] c" %hbuf = call ptr @malloc(i64 \00" -@.str2578 = private unnamed_addr constant [44 x i8] c")\0A call ptr @memset(ptr %hbuf, i32 0, i64 \00" -@.str2579 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2580 = private unnamed_addr constant [97 x i8] c" %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dc\0A store ptr %hbuf, ptr %hp\0A\00" -@.str2581 = private unnamed_addr constant [100 x i8] c" %fp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %dc\0A store i32 %nfields, ptr %fp\0A\00" -@.str2582 = private unnamed_addr constant [100 x i8] c" %np = getelementptr inbounds [32 x ptr], ptr @dynName, i32 0, i32 %dc\0A store ptr %name, ptr %np\0A\00" -@.str2583 = private unnamed_addr constant [22 x i8] c" %id = add i32 %dc, \00" -@.str2584 = private unnamed_addr constant [73 x i8] c"\0A %dc1 = add i32 %dc, 1\0A store i32 %dc1, ptr @dyn_count\0A ret i32 %id\0A\00" -@.str2585 = private unnamed_addr constant [22 x i8] c"rej:\0A ret i32 -1\0A}\0A\0A\00" -@.str2586 = private unnamed_addr constant [56 x i8] c"define void @ludic_attach_dyn(i32 %e, i32 %p) {\0Aentry:\0A\00" -@.str2587 = private unnamed_addr constant [22 x i8] c" %dyn = sub i32 %p, \00" -@.str2588 = private unnamed_addr constant [187 x i8] c"\0A %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dyn\0A %h = load ptr, ptr %hp\0A %slot = getelementptr inbounds i8, ptr %h, i32 %e\0A store i8 1, ptr %slot\0A ret void\0A}\0A\0A\00" -@.str2589 = private unnamed_addr constant [56 x i8] c"define void @ludic_detach_dyn(i32 %e, i32 %p) {\0Aentry:\0A\00" -@.str2590 = private unnamed_addr constant [22 x i8] c" %dyn = sub i32 %p, \00" -@.str2591 = private unnamed_addr constant [187 x i8] c"\0A %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dyn\0A %h = load ptr, ptr %hp\0A %slot = getelementptr inbounds i8, ptr %h, i32 %e\0A store i8 0, ptr %slot\0A ret void\0A}\0A\0A\00" -@.str2592 = private unnamed_addr constant [88 x i8] c"define i32 @ludic_entity_count() {\0Aentry:\0A %n = load i32, ptr @L_entc\0A ret i32 %n\0A}\0A\0A\00" -@.str2593 = private unnamed_addr constant [41 x i8] c"define i32 @ludic_kind(i32 %e) {\0Aentry:\0A\00" -@.str2594 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" -@.str2595 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" -@.str2596 = private unnamed_addr constant [42 x i8] c" %k = load i32, ptr %kp\0A ret i32 %k\0A}\0A\0A\00" -@.str2597 = private unnamed_addr constant [48 x i8] c"define i32 @ludic_model_id(ptr %name) {\0Aentry:\0A\00" -@.str2598 = private unnamed_addr constant [7 x i8] c" %mdc\00" -@.str2599 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" -@.str2600 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2601 = private unnamed_addr constant [7 x i8] c" %mde\00" -@.str2602 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %mdc\00" -@.str2603 = private unnamed_addr constant [5 x i8] c", 0\0A\00" -@.str2604 = private unnamed_addr constant [13 x i8] c" br i1 %mde\00" -@.str2605 = private unnamed_addr constant [13 x i8] c", label %mdh\00" -@.str2606 = private unnamed_addr constant [13 x i8] c", label %mdn\00" -@.str2607 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2608 = private unnamed_addr constant [4 x i8] c"mdh\00" -@.str2609 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" -@.str2610 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2611 = private unnamed_addr constant [4 x i8] c"mdn\00" -@.str2612 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2613 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" -@.str2614 = private unnamed_addr constant [4 x i8] c"int\00" -@.str2615 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str2616 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2617 = private unnamed_addr constant [25 x i8] c"define i32 @ludic_spawn_\00" -@.str2618 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" -@.str2619 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str2620 = private unnamed_addr constant [42 x i8] c"define i32 @ludic_spawn(i32 %m) {\0Aentry:\0A\00" -@.str2621 = private unnamed_addr constant [6 x i8] c" %sm\00" -@.str2622 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %m, \00" -@.str2623 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2624 = private unnamed_addr constant [12 x i8] c" br i1 %sm\00" -@.str2625 = private unnamed_addr constant [12 x i8] c", label %sh\00" -@.str2626 = private unnamed_addr constant [12 x i8] c", label %sn\00" +@.str2152 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2153 = private unnamed_addr constant [3 x i8] c", \00" +@.str2154 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2155 = private unnamed_addr constant [3 x i8] c", \00" +@.str2156 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2157 = private unnamed_addr constant [3 x i8] c", \00" +@.str2158 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2159 = private unnamed_addr constant [3 x i8] c", \00" +@.str2160 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2161 = private unnamed_addr constant [3 x i8] c", \00" +@.str2162 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2163 = private unnamed_addr constant [3 x i8] c", \00" +@.str2164 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2165 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2166 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2167 = private unnamed_addr constant [11 x i8] c"point_rect\00" +@.str2168 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2169 = private unnamed_addr constant [3 x i8] c", \00" +@.str2170 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2171 = private unnamed_addr constant [3 x i8] c", \00" +@.str2172 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str2173 = private unnamed_addr constant [3 x i8] c", \00" +@.str2174 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2175 = private unnamed_addr constant [3 x i8] c", \00" +@.str2176 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str2177 = private unnamed_addr constant [3 x i8] c", \00" +@.str2178 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str2179 = private unnamed_addr constant [3 x i8] c", \00" +@.str2180 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2181 = private unnamed_addr constant [3 x i8] c", \00" +@.str2182 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2183 = private unnamed_addr constant [3 x i8] c", \00" +@.str2184 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str2185 = private unnamed_addr constant [3 x i8] c", \00" +@.str2186 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2187 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2188 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2189 = private unnamed_addr constant [8 x i8] c"circles\00" +@.str2190 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2191 = private unnamed_addr constant [3 x i8] c", \00" +@.str2192 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2193 = private unnamed_addr constant [3 x i8] c", \00" +@.str2194 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2195 = private unnamed_addr constant [3 x i8] c", \00" +@.str2196 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2197 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2198 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2199 = private unnamed_addr constant [3 x i8] c", \00" +@.str2200 = private unnamed_addr constant [14 x i8] c"icmp sle i64 \00" +@.str2201 = private unnamed_addr constant [3 x i8] c", \00" +@.str2202 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2203 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2204 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2205 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2206 = private unnamed_addr constant [3 x i8] c", \00" +@.str2207 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2208 = private unnamed_addr constant [3 x i8] c", \00" +@.str2209 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2210 = private unnamed_addr constant [3 x i8] c", \00" +@.str2211 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2212 = private unnamed_addr constant [3 x i8] c", \00" +@.str2213 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2214 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2215 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2216 = private unnamed_addr constant [3 x i8] c", \00" +@.str2217 = private unnamed_addr constant [14 x i8] c"icmp sle i64 \00" +@.str2218 = private unnamed_addr constant [3 x i8] c", \00" +@.str2219 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2220 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2221 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2222 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str2223 = private unnamed_addr constant [6 x i8] c"words\00" +@.str2224 = private unnamed_addr constant [5 x i8] c"copy\00" +@.str2225 = private unnamed_addr constant [5 x i8] c"fill\00" +@.str2226 = private unnamed_addr constant [5 x i8] c"peek\00" +@.str2227 = private unnamed_addr constant [5 x i8] c"poke\00" +@.str2228 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str2229 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str2230 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2231 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str2232 = private unnamed_addr constant [2 x i8] c")\00" +@.str2233 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2234 = private unnamed_addr constant [6 x i8] c"words\00" +@.str2235 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2236 = private unnamed_addr constant [4 x i8] c", 4\00" +@.str2237 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str2238 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2239 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str2240 = private unnamed_addr constant [2 x i8] c")\00" +@.str2241 = private unnamed_addr constant [6 x i8] c"words\00" +@.str2242 = private unnamed_addr constant [5 x i8] c"copy\00" +@.str2243 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str2244 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2245 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str2246 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2247 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str2248 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str2249 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2250 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2251 = private unnamed_addr constant [5 x i8] c"fill\00" +@.str2252 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str2253 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2254 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" +@.str2255 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2256 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str2257 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str2258 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2259 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2260 = private unnamed_addr constant [5 x i8] c"peek\00" +@.str2261 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str2262 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2263 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str2264 = private unnamed_addr constant [9 x i8] c"zext i8 \00" +@.str2265 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2266 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2267 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str2268 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2269 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" +@.str2270 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str2271 = private unnamed_addr constant [12 x i8] c" store i8 \00" +@.str2272 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2273 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2274 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2275 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2276 = private unnamed_addr constant [6 x i8] c"frame\00" +@.str2277 = private unnamed_addr constant [6 x i8] c"delta\00" +@.str2278 = private unnamed_addr constant [8 x i8] c"elapsed\00" +@.str2279 = private unnamed_addr constant [4 x i8] c"now\00" +@.str2280 = private unnamed_addr constant [6 x i8] c"frame\00" +@.str2281 = private unnamed_addr constant [23 x i8] c"load i32, ptr @L_frame\00" +@.str2282 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2283 = private unnamed_addr constant [6 x i8] c"delta\00" +@.str2284 = private unnamed_addr constant [5 x i8] c"1092\00" +@.str2285 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2286 = private unnamed_addr constant [8 x i8] c"elapsed\00" +@.str2287 = private unnamed_addr constant [23 x i8] c"load i32, ptr @L_frame\00" +@.str2288 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2289 = private unnamed_addr constant [7 x i8] c", 1092\00" +@.str2290 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2291 = private unnamed_addr constant [25 x i8] c"call i64 @time(ptr null)\00" +@.str2292 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str2293 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2294 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2295 = private unnamed_addr constant [4 x i8] c"rgb\00" +@.str2296 = private unnamed_addr constant [5 x i8] c"rgba\00" +@.str2297 = private unnamed_addr constant [5 x i8] c"lerp\00" +@.str2298 = private unnamed_addr constant [7 x i8] c"darken\00" +@.str2299 = private unnamed_addr constant [8 x i8] c"lighten\00" +@.str2300 = private unnamed_addr constant [11 x i8] c"with_alpha\00" +@.str2301 = private unnamed_addr constant [10 x i8] c"lshr i32 \00" +@.str2302 = private unnamed_addr constant [3 x i8] c", \00" +@.str2303 = private unnamed_addr constant [9 x i8] c"and i32 \00" +@.str2304 = private unnamed_addr constant [6 x i8] c", 255\00" +@.str2305 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str2306 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2307 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str2308 = private unnamed_addr constant [4 x i8] c", 8\00" +@.str2309 = private unnamed_addr constant [8 x i8] c"or i32 \00" +@.str2310 = private unnamed_addr constant [3 x i8] c", \00" +@.str2311 = private unnamed_addr constant [8 x i8] c"or i32 \00" +@.str2312 = private unnamed_addr constant [3 x i8] c", \00" +@.str2313 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str2314 = private unnamed_addr constant [3 x i8] c", \00" +@.str2315 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2316 = private unnamed_addr constant [3 x i8] c", \00" +@.str2317 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2318 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2319 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2320 = private unnamed_addr constant [3 x i8] c", \00" +@.str2321 = private unnamed_addr constant [4 x i8] c"rgb\00" +@.str2322 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2323 = private unnamed_addr constant [5 x i8] c"rgba\00" +@.str2324 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str2325 = private unnamed_addr constant [5 x i8] c", 24\00" +@.str2326 = private unnamed_addr constant [8 x i8] c"or i32 \00" +@.str2327 = private unnamed_addr constant [3 x i8] c", \00" +@.str2328 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2329 = private unnamed_addr constant [11 x i8] c"with_alpha\00" +@.str2330 = private unnamed_addr constant [9 x i8] c"and i32 \00" +@.str2331 = private unnamed_addr constant [11 x i8] c", 16777215\00" +@.str2332 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str2333 = private unnamed_addr constant [5 x i8] c", 24\00" +@.str2334 = private unnamed_addr constant [8 x i8] c"or i32 \00" +@.str2335 = private unnamed_addr constant [3 x i8] c", \00" +@.str2336 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2337 = private unnamed_addr constant [5 x i8] c"lerp\00" +@.str2338 = private unnamed_addr constant [3 x i8] c"16\00" +@.str2339 = private unnamed_addr constant [3 x i8] c"16\00" +@.str2340 = private unnamed_addr constant [2 x i8] c"8\00" +@.str2341 = private unnamed_addr constant [2 x i8] c"8\00" +@.str2342 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2343 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2344 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2345 = private unnamed_addr constant [7 x i8] c"darken\00" +@.str2346 = private unnamed_addr constant [16 x i8] c"sub i32 65536, \00" +@.str2347 = private unnamed_addr constant [3 x i8] c"16\00" +@.str2348 = private unnamed_addr constant [2 x i8] c"8\00" +@.str2349 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2350 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2351 = private unnamed_addr constant [3 x i8] c", \00" +@.str2352 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2353 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2354 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2355 = private unnamed_addr constant [3 x i8] c", \00" +@.str2356 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2357 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2358 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2359 = private unnamed_addr constant [3 x i8] c", \00" +@.str2360 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2361 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2362 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2363 = private unnamed_addr constant [3 x i8] c"16\00" +@.str2364 = private unnamed_addr constant [2 x i8] c"8\00" +@.str2365 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2366 = private unnamed_addr constant [14 x i8] c"sub i32 255, \00" +@.str2367 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2368 = private unnamed_addr constant [3 x i8] c", \00" +@.str2369 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2370 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2371 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2372 = private unnamed_addr constant [3 x i8] c", \00" +@.str2373 = private unnamed_addr constant [14 x i8] c"sub i32 255, \00" +@.str2374 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2375 = private unnamed_addr constant [3 x i8] c", \00" +@.str2376 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2377 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2378 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2379 = private unnamed_addr constant [3 x i8] c", \00" +@.str2380 = private unnamed_addr constant [14 x i8] c"sub i32 255, \00" +@.str2381 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2382 = private unnamed_addr constant [3 x i8] c", \00" +@.str2383 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str2384 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2385 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2386 = private unnamed_addr constant [3 x i8] c", \00" +@.str2387 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2388 = private unnamed_addr constant [6 x i8] c"White\00" +@.str2389 = private unnamed_addr constant [5 x i8] c"Snow\00" +@.str2390 = private unnamed_addr constant [6 x i8] c"Ivory\00" +@.str2391 = private unnamed_addr constant [14 x i8] c"EggShellWhite\00" +@.str2392 = private unnamed_addr constant [12 x i8] c"FloralWhite\00" +@.str2393 = private unnamed_addr constant [9 x i8] c"SeaShell\00" +@.str2394 = private unnamed_addr constant [6 x i8] c"Linen\00" +@.str2395 = private unnamed_addr constant [13 x i8] c"AntiqueWhite\00" +@.str2396 = private unnamed_addr constant [8 x i8] c"OldLace\00" +@.str2397 = private unnamed_addr constant [6 x i8] c"Beige\00" +@.str2398 = private unnamed_addr constant [6 x i8] c"Cream\00" +@.str2399 = private unnamed_addr constant [9 x i8] c"Honeydew\00" +@.str2400 = private unnamed_addr constant [10 x i8] c"MintCream\00" +@.str2401 = private unnamed_addr constant [6 x i8] c"Azure\00" +@.str2402 = private unnamed_addr constant [10 x i8] c"AliceBlue\00" +@.str2403 = private unnamed_addr constant [11 x i8] c"GhostWhite\00" +@.str2404 = private unnamed_addr constant [11 x i8] c"WhiteSmoke\00" +@.str2405 = private unnamed_addr constant [9 x i8] c"Lavender\00" +@.str2406 = private unnamed_addr constant [5 x i8] c"Bone\00" +@.str2407 = private unnamed_addr constant [10 x i8] c"Parchment\00" +@.str2408 = private unnamed_addr constant [10 x i8] c"Gainsboro\00" +@.str2409 = private unnamed_addr constant [10 x i8] c"LightGray\00" +@.str2410 = private unnamed_addr constant [7 x i8] c"Silver\00" +@.str2411 = private unnamed_addr constant [4 x i8] c"Ash\00" +@.str2412 = private unnamed_addr constant [9 x i8] c"DarkGray\00" +@.str2413 = private unnamed_addr constant [5 x i8] c"Gray\00" +@.str2414 = private unnamed_addr constant [8 x i8] c"DimGray\00" +@.str2415 = private unnamed_addr constant [7 x i8] c"Nickel\00" +@.str2416 = private unnamed_addr constant [6 x i8] c"Slate\00" +@.str2417 = private unnamed_addr constant [10 x i8] c"SlateGray\00" +@.str2418 = private unnamed_addr constant [15 x i8] c"LightSlateGray\00" +@.str2419 = private unnamed_addr constant [9 x i8] c"Gunmetal\00" +@.str2420 = private unnamed_addr constant [9 x i8] c"Charcoal\00" +@.str2421 = private unnamed_addr constant [9 x i8] c"Graphite\00" +@.str2422 = private unnamed_addr constant [5 x i8] c"Onyx\00" +@.str2423 = private unnamed_addr constant [4 x i8] c"Jet\00" +@.str2424 = private unnamed_addr constant [6 x i8] c"Black\00" +@.str2425 = private unnamed_addr constant [11 x i8] c"EerieBlack\00" +@.str2426 = private unnamed_addr constant [12 x i8] c"RaisinBlack\00" +@.str2427 = private unnamed_addr constant [6 x i8] c"Ebony\00" +@.str2428 = private unnamed_addr constant [4 x i8] c"Red\00" +@.str2429 = private unnamed_addr constant [8 x i8] c"Crimson\00" +@.str2430 = private unnamed_addr constant [8 x i8] c"Scarlet\00" +@.str2431 = private unnamed_addr constant [10 x i8] c"Vermilion\00" +@.str2432 = private unnamed_addr constant [10 x i8] c"FireBrick\00" +@.str2433 = private unnamed_addr constant [9 x i8] c"Cinnabar\00" +@.str2434 = private unnamed_addr constant [8 x i8] c"DarkRed\00" +@.str2435 = private unnamed_addr constant [7 x i8] c"Maroon\00" +@.str2436 = private unnamed_addr constant [5 x i8] c"Ruby\00" +@.str2437 = private unnamed_addr constant [9 x i8] c"Cardinal\00" +@.str2438 = private unnamed_addr constant [10 x i8] c"IndianRed\00" +@.str2439 = private unnamed_addr constant [5 x i8] c"Rust\00" +@.str2440 = private unnamed_addr constant [8 x i8] c"Sangria\00" +@.str2441 = private unnamed_addr constant [8 x i8] c"Redwood\00" +@.str2442 = private unnamed_addr constant [7 x i8] c"Cerise\00" +@.str2443 = private unnamed_addr constant [9 x i8] c"Amaranth\00" +@.str2444 = private unnamed_addr constant [8 x i8] c"Carmine\00" +@.str2445 = private unnamed_addr constant [9 x i8] c"Chestnut\00" +@.str2446 = private unnamed_addr constant [6 x i8] c"Brick\00" +@.str2447 = private unnamed_addr constant [11 x i8] c"TerraCotta\00" +@.str2448 = private unnamed_addr constant [5 x i8] c"Pink\00" +@.str2449 = private unnamed_addr constant [10 x i8] c"LightPink\00" +@.str2450 = private unnamed_addr constant [8 x i8] c"HotPink\00" +@.str2451 = private unnamed_addr constant [9 x i8] c"DeepPink\00" +@.str2452 = private unnamed_addr constant [14 x i8] c"PaleVioletRed\00" +@.str2453 = private unnamed_addr constant [5 x i8] c"Rose\00" +@.str2454 = private unnamed_addr constant [6 x i8] c"Blush\00" +@.str2455 = private unnamed_addr constant [7 x i8] c"Salmon\00" +@.str2456 = private unnamed_addr constant [12 x i8] c"LightSalmon\00" +@.str2457 = private unnamed_addr constant [11 x i8] c"DarkSalmon\00" +@.str2458 = private unnamed_addr constant [6 x i8] c"Coral\00" +@.str2459 = private unnamed_addr constant [11 x i8] c"Watermelon\00" +@.str2460 = private unnamed_addr constant [9 x i8] c"Flamingo\00" +@.str2461 = private unnamed_addr constant [10 x i8] c"Bubblegum\00" +@.str2462 = private unnamed_addr constant [8 x i8] c"Fuchsia\00" +@.str2463 = private unnamed_addr constant [8 x i8] c"Magenta\00" +@.str2464 = private unnamed_addr constant [6 x i8] c"Mauve\00" +@.str2465 = private unnamed_addr constant [5 x i8] c"Puce\00" +@.str2466 = private unnamed_addr constant [8 x i8] c"Thistle\00" +@.str2467 = private unnamed_addr constant [7 x i8] c"Orchid\00" +@.str2468 = private unnamed_addr constant [7 x i8] c"Orange\00" +@.str2469 = private unnamed_addr constant [11 x i8] c"DarkOrange\00" +@.str2470 = private unnamed_addr constant [10 x i8] c"Tangerine\00" +@.str2471 = private unnamed_addr constant [8 x i8] c"Pumpkin\00" +@.str2472 = private unnamed_addr constant [8 x i8] c"Apricot\00" +@.str2473 = private unnamed_addr constant [6 x i8] c"Peach\00" +@.str2474 = private unnamed_addr constant [11 x i8] c"Cantaloupe\00" +@.str2475 = private unnamed_addr constant [6 x i8] c"Amber\00" +@.str2476 = private unnamed_addr constant [7 x i8] c"Bronze\00" +@.str2477 = private unnamed_addr constant [7 x i8] c"Copper\00" +@.str2478 = private unnamed_addr constant [9 x i8] c"Marigold\00" +@.str2479 = private unnamed_addr constant [7 x i8] c"Carrot\00" +@.str2480 = private unnamed_addr constant [10 x i8] c"Persimmon\00" +@.str2481 = private unnamed_addr constant [7 x i8] c"Papaya\00" +@.str2482 = private unnamed_addr constant [7 x i8] c"Sunset\00" +@.str2483 = private unnamed_addr constant [7 x i8] c"Yellow\00" +@.str2484 = private unnamed_addr constant [12 x i8] c"LightYellow\00" +@.str2485 = private unnamed_addr constant [5 x i8] c"Gold\00" +@.str2486 = private unnamed_addr constant [10 x i8] c"Goldenrod\00" +@.str2487 = private unnamed_addr constant [6 x i8] c"Lemon\00" +@.str2488 = private unnamed_addr constant [7 x i8] c"Canary\00" +@.str2489 = private unnamed_addr constant [8 x i8] c"Mustard\00" +@.str2490 = private unnamed_addr constant [5 x i8] c"Flax\00" +@.str2491 = private unnamed_addr constant [6 x i8] c"Wheat\00" +@.str2492 = private unnamed_addr constant [5 x i8] c"Corn\00" +@.str2493 = private unnamed_addr constant [10 x i8] c"Dandelion\00" +@.str2494 = private unnamed_addr constant [8 x i8] c"Saffron\00" +@.str2495 = private unnamed_addr constant [6 x i8] c"Khaki\00" +@.str2496 = private unnamed_addr constant [10 x i8] c"DarkKhaki\00" +@.str2497 = private unnamed_addr constant [6 x i8] c"Straw\00" +@.str2498 = private unnamed_addr constant [6 x i8] c"Brown\00" +@.str2499 = private unnamed_addr constant [12 x i8] c"SaddleBrown\00" +@.str2500 = private unnamed_addr constant [7 x i8] c"Sienna\00" +@.str2501 = private unnamed_addr constant [10 x i8] c"Chocolate\00" +@.str2502 = private unnamed_addr constant [5 x i8] c"Peru\00" +@.str2503 = private unnamed_addr constant [4 x i8] c"Tan\00" +@.str2504 = private unnamed_addr constant [10 x i8] c"BurlyWood\00" +@.str2505 = private unnamed_addr constant [5 x i8] c"Sand\00" +@.str2506 = private unnamed_addr constant [7 x i8] c"Coffee\00" +@.str2507 = private unnamed_addr constant [9 x i8] c"Espresso\00" +@.str2508 = private unnamed_addr constant [9 x i8] c"Mahogany\00" +@.str2509 = private unnamed_addr constant [7 x i8] c"Walnut\00" +@.str2510 = private unnamed_addr constant [6 x i8] c"Umber\00" +@.str2511 = private unnamed_addr constant [6 x i8] c"Sepia\00" +@.str2512 = private unnamed_addr constant [6 x i8] c"Taupe\00" +@.str2513 = private unnamed_addr constant [5 x i8] c"Fawn\00" +@.str2514 = private unnamed_addr constant [8 x i8] c"Caramel\00" +@.str2515 = private unnamed_addr constant [6 x i8] c"Cocoa\00" +@.str2516 = private unnamed_addr constant [6 x i8] c"Hazel\00" +@.str2517 = private unnamed_addr constant [6 x i8] c"Wenge\00" +@.str2518 = private unnamed_addr constant [6 x i8] c"Green\00" +@.str2519 = private unnamed_addr constant [5 x i8] c"Lime\00" +@.str2520 = private unnamed_addr constant [10 x i8] c"LimeGreen\00" +@.str2521 = private unnamed_addr constant [10 x i8] c"LawnGreen\00" +@.str2522 = private unnamed_addr constant [11 x i8] c"Chartreuse\00" +@.str2523 = private unnamed_addr constant [12 x i8] c"GreenYellow\00" +@.str2524 = private unnamed_addr constant [12 x i8] c"SpringGreen\00" +@.str2525 = private unnamed_addr constant [10 x i8] c"MintGreen\00" +@.str2526 = private unnamed_addr constant [9 x i8] c"SeaGreen\00" +@.str2527 = private unnamed_addr constant [15 x i8] c"MediumSeaGreen\00" +@.str2528 = private unnamed_addr constant [12 x i8] c"ForestGreen\00" +@.str2529 = private unnamed_addr constant [10 x i8] c"DarkGreen\00" +@.str2530 = private unnamed_addr constant [10 x i8] c"OliveDrab\00" +@.str2531 = private unnamed_addr constant [6 x i8] c"Olive\00" +@.str2532 = private unnamed_addr constant [5 x i8] c"Moss\00" +@.str2533 = private unnamed_addr constant [5 x i8] c"Fern\00" +@.str2534 = private unnamed_addr constant [8 x i8] c"Emerald\00" +@.str2535 = private unnamed_addr constant [5 x i8] c"Jade\00" +@.str2536 = private unnamed_addr constant [10 x i8] c"Malachite\00" +@.str2537 = private unnamed_addr constant [9 x i8] c"Shamrock\00" +@.str2538 = private unnamed_addr constant [10 x i8] c"Pistachio\00" +@.str2539 = private unnamed_addr constant [8 x i8] c"Avocado\00" +@.str2540 = private unnamed_addr constant [5 x i8] c"Pine\00" +@.str2541 = private unnamed_addr constant [5 x i8] c"Sage\00" +@.str2542 = private unnamed_addr constant [6 x i8] c"Kelly\00" +@.str2543 = private unnamed_addr constant [7 x i8] c"Hunter\00" +@.str2544 = private unnamed_addr constant [6 x i8] c"Basil\00" +@.str2545 = private unnamed_addr constant [7 x i8] c"Clover\00" +@.str2546 = private unnamed_addr constant [8 x i8] c"Juniper\00" +@.str2547 = private unnamed_addr constant [5 x i8] c"Neon\00" +@.str2548 = private unnamed_addr constant [5 x i8] c"Cyan\00" +@.str2549 = private unnamed_addr constant [5 x i8] c"Aqua\00" +@.str2550 = private unnamed_addr constant [10 x i8] c"LightCyan\00" +@.str2551 = private unnamed_addr constant [14 x i8] c"PaleTurquoise\00" +@.str2552 = private unnamed_addr constant [11 x i8] c"Aquamarine\00" +@.str2553 = private unnamed_addr constant [10 x i8] c"Turquoise\00" +@.str2554 = private unnamed_addr constant [16 x i8] c"MediumTurquoise\00" +@.str2555 = private unnamed_addr constant [14 x i8] c"DarkTurquoise\00" +@.str2556 = private unnamed_addr constant [5 x i8] c"Teal\00" +@.str2557 = private unnamed_addr constant [9 x i8] c"DarkCyan\00" +@.str2558 = private unnamed_addr constant [10 x i8] c"CadetBlue\00" +@.str2559 = private unnamed_addr constant [7 x i8] c"Lagoon\00" +@.str2560 = private unnamed_addr constant [8 x i8] c"Seafoam\00" +@.str2561 = private unnamed_addr constant [9 x i8] c"Cerulean\00" +@.str2562 = private unnamed_addr constant [13 x i8] c"SkyBlueLight\00" +@.str2563 = private unnamed_addr constant [6 x i8] c"Robin\00" +@.str2564 = private unnamed_addr constant [10 x i8] c"Verdigris\00" +@.str2565 = private unnamed_addr constant [8 x i8] c"Celadon\00" +@.str2566 = private unnamed_addr constant [5 x i8] c"Blue\00" +@.str2567 = private unnamed_addr constant [10 x i8] c"LightBlue\00" +@.str2568 = private unnamed_addr constant [11 x i8] c"PowderBlue\00" +@.str2569 = private unnamed_addr constant [8 x i8] c"SkyBlue\00" +@.str2570 = private unnamed_addr constant [13 x i8] c"LightSkyBlue\00" +@.str2571 = private unnamed_addr constant [12 x i8] c"DeepSkyBlue\00" +@.str2572 = private unnamed_addr constant [11 x i8] c"DodgerBlue\00" +@.str2573 = private unnamed_addr constant [15 x i8] c"CornflowerBlue\00" +@.str2574 = private unnamed_addr constant [10 x i8] c"SteelBlue\00" +@.str2575 = private unnamed_addr constant [10 x i8] c"RoyalBlue\00" +@.str2576 = private unnamed_addr constant [11 x i8] c"MediumBlue\00" +@.str2577 = private unnamed_addr constant [9 x i8] c"DarkBlue\00" +@.str2578 = private unnamed_addr constant [5 x i8] c"Navy\00" +@.str2579 = private unnamed_addr constant [13 x i8] c"MidnightBlue\00" +@.str2580 = private unnamed_addr constant [7 x i8] c"Cobalt\00" +@.str2581 = private unnamed_addr constant [9 x i8] c"Sapphire\00" +@.str2582 = private unnamed_addr constant [6 x i8] c"Denim\00" +@.str2583 = private unnamed_addr constant [7 x i8] c"Indigo\00" +@.str2584 = private unnamed_addr constant [9 x i8] c"Prussian\00" +@.str2585 = private unnamed_addr constant [12 x i8] c"Ultramarine\00" +@.str2586 = private unnamed_addr constant [11 x i8] c"Periwinkle\00" +@.str2587 = private unnamed_addr constant [5 x i8] c"Iris\00" +@.str2588 = private unnamed_addr constant [9 x i8] c"Glaucous\00" +@.str2589 = private unnamed_addr constant [7 x i8] c"Zaffre\00" +@.str2590 = private unnamed_addr constant [6 x i8] c"Berry\00" +@.str2591 = private unnamed_addr constant [7 x i8] c"Purple\00" +@.str2592 = private unnamed_addr constant [7 x i8] c"Violet\00" +@.str2593 = private unnamed_addr constant [11 x i8] c"DarkViolet\00" +@.str2594 = private unnamed_addr constant [11 x i8] c"BlueViolet\00" +@.str2595 = private unnamed_addr constant [13 x i8] c"MediumPurple\00" +@.str2596 = private unnamed_addr constant [9 x i8] c"Amethyst\00" +@.str2597 = private unnamed_addr constant [5 x i8] c"Plum\00" +@.str2598 = private unnamed_addr constant [9 x i8] c"Eggplant\00" +@.str2599 = private unnamed_addr constant [6 x i8] c"Grape\00" +@.str2600 = private unnamed_addr constant [5 x i8] c"Wine\00" +@.str2601 = private unnamed_addr constant [9 x i8] c"Mulberry\00" +@.str2602 = private unnamed_addr constant [6 x i8] c"Lilac\00" +@.str2603 = private unnamed_addr constant [9 x i8] c"Wisteria\00" +@.str2604 = private unnamed_addr constant [11 x i8] c"Heliotrope\00" +@.str2605 = private unnamed_addr constant [10 x i8] c"Byzantium\00" +@.str2606 = private unnamed_addr constant [7 x i8] c"Tyrian\00" +@.str2607 = private unnamed_addr constant [14 x i8] c"RebeccaPurple\00" +@.str2608 = private unnamed_addr constant [8 x i8] c"Orchid2\00" +@.str2609 = private unnamed_addr constant [15 x i8] c"getelementptr \00" +@.str2610 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" +@.str2611 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str2612 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2613 = private unnamed_addr constant [27 x i8] c"unknown record type in new\00" +@.str2614 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str2615 = private unnamed_addr constant [2 x i8] c")\00" +@.str2616 = private unnamed_addr constant [3 x i8] c" \00" +@.str2617 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str2618 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2619 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str2620 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2621 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2622 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2623 = private unnamed_addr constant [5 x i8] c"null\00" +@.str2624 = private unnamed_addr constant [9 x i8] c" store \00" +@.str2625 = private unnamed_addr constant [2 x i8] c" \00" +@.str2626 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str2627 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2628 = private unnamed_addr constant [3 x i8] c"sh\00" -@.str2629 = private unnamed_addr constant [8 x i8] c":\0A %sr\00" -@.str2630 = private unnamed_addr constant [26 x i8] c" = call i32 @ludic_spawn_\00" -@.str2631 = private unnamed_addr constant [17 x i8] c"()\0A ret i32 %sr\00" -@.str2632 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2633 = private unnamed_addr constant [3 x i8] c"sn\00" -@.str2634 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2635 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" -@.str2636 = private unnamed_addr constant [58 x i8] c"define i32 @ludic_query_next(i32 %p, i32 %from) {\0Aentry:\0A\00" -@.str2637 = private unnamed_addr constant [47 x i8] c" %n = load i32, ptr @L_entc\0A br label %loop\0A\00" -@.str2638 = private unnamed_addr constant [56 x i8] c"loop:\0A %e = phi i32 [ %from, %entry ], [ %e1, %cont ]\0A\00" -@.str2639 = private unnamed_addr constant [67 x i8] c" %go = icmp slt i32 %e, %n\0A br i1 %go, label %body, label %none\0A\00" -@.str2640 = private unnamed_addr constant [39 x i8] c"body:\0A %ap = getelementptr inbounds [\00" -@.str2641 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str2642 = private unnamed_addr constant [93 x i8] c" %al = load i32, ptr %ap\0A %isa = icmp ne i32 %al, 0\0A br i1 %isa, label %chk, label %cont\0A\00" -@.str2643 = private unnamed_addr constant [115 x i8] c"chk:\0A %h = call i32 @ludic_has(i32 %e, i32 %p)\0A %hit = icmp ne i32 %h, 0\0A br i1 %hit, label %hitb, label %cont\0A\00" -@.str2644 = private unnamed_addr constant [20 x i8] c"hitb:\0A ret i32 %e\0A\00" -@.str2645 = private unnamed_addr constant [46 x i8] c"cont:\0A %e1 = add i32 %e, 1\0A br label %loop\0A\00" -@.str2646 = private unnamed_addr constant [23 x i8] c"none:\0A ret i32 -1\0A}\0A\0A\00" -@.str2647 = private unnamed_addr constant [38 x i8] c"define void @L_tick_fixed() {\0Aentry:\0A\00" -@.str2648 = private unnamed_addr constant [6 x i8] c"Input\00" -@.str2649 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" -@.str2650 = private unnamed_addr constant [7 x i8] c"Update\00" -@.str2651 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" -@.str2652 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str2653 = private unnamed_addr constant [39 x i8] c"define void @L_tick_render() {\0Aentry:\0A\00" -@.str2654 = private unnamed_addr constant [7 x i8] c"Render\00" -@.str2655 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str2656 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str2657 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str2658 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str2659 = private unnamed_addr constant [8 x i8] c"rt_init\00" -@.str2660 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" -@.str2661 = private unnamed_addr constant [6 x i8] c"Start\00" -@.str2662 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2663 = private unnamed_addr constant [16 x i8] c", ptr @L_scene\0A\00" -@.str2664 = private unnamed_addr constant [26 x i8] c" call void @scene_enter_\00" -@.str2665 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2666 = private unnamed_addr constant [14 x i8] c"program_start\00" -@.str2667 = private unnamed_addr constant [33 x i8] c" call void @ev_program_start()\0A\00" -@.str2668 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str2669 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" -@.str2670 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" -@.str2671 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str2672 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str2673 = private unnamed_addr constant [11 x i8] c"rt_running\00" -@.str2674 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" -@.str2675 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str2676 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str2677 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str2678 = private unnamed_addr constant [3 x i8] c", \00" -@.str2679 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2680 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str2681 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2682 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str2683 = private unnamed_addr constant [7 x i8] c"body:\0A\00" -@.str2684 = private unnamed_addr constant [8 x i8] c"rt_poll\00" -@.str2685 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" -@.str2686 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2687 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" -@.str2688 = private unnamed_addr constant [6 x i8] c"Input\00" -@.str2689 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" -@.str2690 = private unnamed_addr constant [7 x i8] c"Update\00" -@.str2691 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" -@.str2692 = private unnamed_addr constant [7 x i8] c"Render\00" -@.str2693 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str2694 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str2695 = private unnamed_addr constant [35 x i8] c" call void @L_despawn_all(i32 2)\0A\00" -@.str2696 = private unnamed_addr constant [7 x i8] c"OnQuit\00" -@.str2697 = private unnamed_addr constant [13 x i8] c"program_quit\00" -@.str2698 = private unnamed_addr constant [32 x i8] c" call void @ev_program_quit()\0A\00" -@.str2699 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" -@.str2700 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" -@.str2701 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" -@.str2702 = private unnamed_addr constant [1 x i8] c"\00" -@.str2703 = private unnamed_addr constant [18 x i8] c"load i32, ptr @g_\00" -@.str2704 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" -@.str2705 = private unnamed_addr constant [2 x i8] c")\00" -@.str2706 = private unnamed_addr constant [6 x i8] c"smend\00" -@.str2707 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str2708 = private unnamed_addr constant [3 x i8] c", \00" -@.str2709 = private unnamed_addr constant [6 x i8] c"sbody\00" -@.str2710 = private unnamed_addr constant [5 x i8] c"sarm\00" -@.str2711 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str2712 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2713 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str2714 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2715 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2716 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2628 = private unnamed_addr constant [8 x i8] c"%LSlice\00" +@.str2629 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str2630 = private unnamed_addr constant [2 x i8] c")\00" +@.str2631 = private unnamed_addr constant [3 x i8] c" \00" +@.str2632 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str2633 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str2634 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" +@.str2635 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2636 = private unnamed_addr constant [3 x i8] c" \00" +@.str2637 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str2638 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" +@.str2639 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str2640 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2641 = private unnamed_addr constant [3 x i8] c" \00" +@.str2642 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str2643 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" +@.str2644 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str2645 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2646 = private unnamed_addr constant [3 x i8] c" \00" +@.str2647 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str2648 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str2649 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2650 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2651 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2652 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str2653 = private unnamed_addr constant [2 x i8] c")\00" +@.str2654 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str2655 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2656 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2657 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2658 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2659 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str2660 = private unnamed_addr constant [3 x i8] c", \00" +@.str2661 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str2662 = private unnamed_addr constant [4 x i8] c"put\00" +@.str2663 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str2664 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2665 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2666 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2667 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2668 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str2669 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str2670 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str2671 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str2672 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str2673 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" +@.str2674 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str2675 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2676 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2677 = private unnamed_addr constant [3 x i8] c", \00" +@.str2678 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str2679 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str2680 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str2681 = private unnamed_addr constant [2 x i8] c")\00" +@.str2682 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str2683 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2684 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2685 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str2686 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2687 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2688 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2689 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2690 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2691 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str2692 = private unnamed_addr constant [3 x i8] c" \00" +@.str2693 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str2694 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2695 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str2696 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2697 = private unnamed_addr constant [9 x i8] c" store \00" +@.str2698 = private unnamed_addr constant [2 x i8] c" \00" +@.str2699 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2700 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2701 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str2702 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str2703 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str2704 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2705 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2706 = private unnamed_addr constant [2 x i8] c"0\00" +@.str2707 = private unnamed_addr constant [5 x i8] c"void\00" +@.str2708 = private unnamed_addr constant [6 x i8] c"load \00" +@.str2709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2710 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2711 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str2712 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str2713 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2714 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2715 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str2716 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str2717 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2718 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2719 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str2720 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2721 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2722 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2723 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" +@.str2718 = private unnamed_addr constant [3 x i8] c"sc\00" +@.str2719 = private unnamed_addr constant [6 x i8] c"scend\00" +@.str2720 = private unnamed_addr constant [4 x i8] c"and\00" +@.str2721 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str2722 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2723 = private unnamed_addr constant [10 x i8] c", label %\00" @.str2724 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2725 = private unnamed_addr constant [32 x i8] c" call void @fn_rt_set_reg(i32 \00" -@.str2726 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str2727 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2728 = private unnamed_addr constant [27 x i8] c"become: no state or scene \00" -@.str2729 = private unnamed_addr constant [25 x i8] c" call void @scene_exit_\00" -@.str2730 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2731 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str2732 = private unnamed_addr constant [16 x i8] c", ptr @L_scene\0A\00" -@.str2733 = private unnamed_addr constant [26 x i8] c" call void @scene_enter_\00" -@.str2734 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str2735 = private unnamed_addr constant [5 x i8] c"file\00" -@.str2736 = private unnamed_addr constant [4 x i8] c"%io\00" -@.str2737 = private unnamed_addr constant [3 x i8] c" \00" -@.str2738 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" -@.str2739 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str2740 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str2741 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" -@.str2742 = private unnamed_addr constant [5 x i8] c"size\00" -@.str2743 = private unnamed_addr constant [6 x i8] c"%ioff\00" -@.str2744 = private unnamed_addr constant [3 x i8] c" \00" -@.str2745 = private unnamed_addr constant [12 x i8] c" = add i64 \00" -@.str2746 = private unnamed_addr constant [3 x i8] c", \00" -@.str2747 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2748 = private unnamed_addr constant [5 x i8] c"%ioa\00" -@.str2749 = private unnamed_addr constant [3 x i8] c" \00" -@.str2750 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i64 \00" -@.str2751 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2752 = private unnamed_addr constant [5 x i8] c"save\00" -@.str2753 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str2754 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2755 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str2756 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2757 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str2758 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2759 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str2760 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2761 = private unnamed_addr constant [6 x i8] c"%ioff\00" -@.str2762 = private unnamed_addr constant [3 x i8] c" \00" -@.str2763 = private unnamed_addr constant [12 x i8] c" = add i64 \00" -@.str2764 = private unnamed_addr constant [3 x i8] c", \00" -@.str2765 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2766 = private unnamed_addr constant [2 x i8] c"0\00" -@.str2767 = private unnamed_addr constant [8 x i8] c"@L_entc\00" -@.str2768 = private unnamed_addr constant [2 x i8] c"4\00" -@.str2769 = private unnamed_addr constant [9 x i8] c"@L_freen\00" -@.str2770 = private unnamed_addr constant [2 x i8] c"4\00" -@.str2771 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" -@.str2772 = private unnamed_addr constant [5 x i8] c", 4\0A\00" -@.str2773 = private unnamed_addr constant [9 x i8] c"@L_alive\00" -@.str2774 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str2775 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" -@.str2776 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str2777 = private unnamed_addr constant [8 x i8] c"@L_kind\00" -@.str2778 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str2779 = private unnamed_addr constant [13 x i8] c"@L_owner_arr\00" -@.str2780 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str2781 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str2782 = private unnamed_addr constant [2 x i8] c"4\00" -@.str2783 = private unnamed_addr constant [5 x i8] c"%csz\00" -@.str2784 = private unnamed_addr constant [3 x i8] c" \00" -@.str2785 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" -@.str2786 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" -@.str2787 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" -@.str2788 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str2789 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str2790 = private unnamed_addr constant [5 x i8] c"file\00" -@.str2791 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" -@.str2792 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" -@.str2793 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" -@.str2794 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" -@.str2795 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" -@.str2796 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" -@.str2797 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" -@.str2798 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str2799 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" -@.str2800 = private unnamed_addr constant [7 x i8] c"fwrite\00" -@.str2801 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" -@.str2802 = 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" -@.str2803 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" -@.str2804 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" -@.str2805 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str2806 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" -@.str2807 = private unnamed_addr constant [6 x i8] c"fread\00" -@.str2808 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" -@.str2809 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" -@.str2810 = private unnamed_addr constant [45 x i8] c"define i32 @L_world_save(ptr %buf) {\0Aentry:\0A\00" -@.str2811 = private unnamed_addr constant [5 x i8] c"save\00" -@.str2812 = private unnamed_addr constant [1 x i8] c"\00" -@.str2813 = private unnamed_addr constant [5 x i8] c"%wsn\00" -@.str2814 = private unnamed_addr constant [3 x i8] c" \00" -@.str2815 = private unnamed_addr constant [14 x i8] c" = trunc i64 \00" -@.str2816 = private unnamed_addr constant [9 x i8] c" to i32\0A\00" -@.str2817 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str2818 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" -@.str2819 = private unnamed_addr constant [56 x i8] c"define void @L_world_load(ptr %buf, i32 %len) {\0Aentry:\0A\00" -@.str2820 = private unnamed_addr constant [5 x i8] c"load\00" -@.str2821 = private unnamed_addr constant [1 x i8] c"\00" -@.str2822 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str2823 = private unnamed_addr constant [37 x i8] c"define i32 @L_world_size() {\0Aentry:\0A\00" -@.str2824 = private unnamed_addr constant [5 x i8] c"size\00" -@.str2825 = private unnamed_addr constant [1 x i8] c"\00" -@.str2826 = private unnamed_addr constant [5 x i8] c"%wzn\00" -@.str2827 = private unnamed_addr constant [3 x i8] c" \00" -@.str2828 = private unnamed_addr constant [14 x i8] c" = trunc i64 \00" -@.str2829 = private unnamed_addr constant [9 x i8] c" to i32\0A\00" -@.str2830 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str2831 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" -@.str2832 = private unnamed_addr constant [5 x i8] c"file\00" -@.str2833 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str2834 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str2835 = private unnamed_addr constant [2 x i8] c"1\00" -@.str2836 = private unnamed_addr constant [2 x i8] c"4\00" -@.str2837 = private unnamed_addr constant [24 x i8] c"ludicc(self): warning: \00" -@.str2838 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2839 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str2840 = private unnamed_addr constant [13 x i8] c"@Sync field \00" -@.str2841 = private unnamed_addr constant [2 x i8] c".\00" -@.str2842 = private unnamed_addr constant [68 x i8] c" is not a POD scalar (networked fields must be int/bool/fixed/byte)\00" -@.str2843 = private unnamed_addr constant [7 x i8] c"model \00" -@.str2844 = private unnamed_addr constant [9 x i8] c" @Syncs \00" -@.str2845 = private unnamed_addr constant [51 x i8] c" but it has no @Sync fields \E2\80\94 nothing replicates\00" -@.str2846 = private unnamed_addr constant [25 x i8] c"define i32 @L_serialize_\00" -@.str2847 = private unnamed_addr constant [29 x i8] c"(i32 %e, ptr %buf) {\0Aentry:\0A\00" -@.str2848 = private unnamed_addr constant [3 x i8] c" \00" -@.str2849 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2850 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str2851 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str2852 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str2853 = private unnamed_addr constant [3 x i8] c" \00" -@.str2854 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str2855 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2856 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2857 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2858 = private unnamed_addr constant [3 x i8] c" \00" -@.str2859 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i32 \00" -@.str2860 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2861 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str2862 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2863 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str2864 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2865 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str2866 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" -@.str2867 = private unnamed_addr constant [22 x i8] c"define void @L_apply_\00" -@.str2868 = private unnamed_addr constant [39 x i8] c"(i32 %e, ptr %buf, i32 %len) {\0Aentry:\0A\00" -@.str2869 = private unnamed_addr constant [3 x i8] c" \00" -@.str2870 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str2871 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str2872 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str2873 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str2874 = private unnamed_addr constant [3 x i8] c" \00" -@.str2875 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str2876 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2877 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str2878 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2879 = private unnamed_addr constant [3 x i8] c" \00" -@.str2880 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i32 \00" -@.str2881 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2882 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str2883 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str2884 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str2885 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str2886 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str2887 = private unnamed_addr constant [56 x i8] c"define i32 @ludic_serialize(i32 %e, ptr %buf) {\0Aentry:\0A\00" -@.str2888 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" -@.str2889 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" -@.str2890 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2891 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" -@.str2892 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2893 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" -@.str2894 = private unnamed_addr constant [11 x i8] c", label %h\00" -@.str2895 = private unnamed_addr constant [11 x i8] c", label %n\00" -@.str2896 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2897 = private unnamed_addr constant [2 x i8] c"h\00" -@.str2898 = private unnamed_addr constant [7 x i8] c":\0A %r\00" -@.str2899 = private unnamed_addr constant [26 x i8] c" = call i32 @L_serialize_\00" -@.str2900 = private unnamed_addr constant [32 x i8] c"(i32 %e, ptr %buf)\0A ret i32 %r\00" -@.str2901 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2902 = private unnamed_addr constant [2 x i8] c"n\00" -@.str2903 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2904 = private unnamed_addr constant [16 x i8] c" ret i32 0\0A}\0A\0A\00" -@.str2905 = private unnamed_addr constant [63 x i8] c"define void @ludic_apply(i32 %e, ptr %buf, i32 %len) {\0Aentry:\0A\00" -@.str2906 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" -@.str2907 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" -@.str2908 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2909 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" -@.str2910 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2911 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" -@.str2912 = private unnamed_addr constant [11 x i8] c", label %h\00" -@.str2913 = private unnamed_addr constant [11 x i8] c", label %n\00" -@.str2914 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2915 = private unnamed_addr constant [2 x i8] c"h\00" -@.str2916 = private unnamed_addr constant [24 x i8] c":\0A call void @L_apply_\00" -@.str2917 = private unnamed_addr constant [41 x i8] c"(i32 %e, ptr %buf, i32 %len)\0A ret void\0A\00" -@.str2918 = private unnamed_addr constant [2 x i8] c"n\00" -@.str2919 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2920 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str2921 = private unnamed_addr constant [46 x i8] c"define i32 @ludic_sync_size(i32 %e) {\0Aentry:\0A\00" -@.str2922 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" -@.str2923 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" -@.str2924 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2925 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" -@.str2926 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2927 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" -@.str2928 = private unnamed_addr constant [11 x i8] c", label %h\00" -@.str2929 = private unnamed_addr constant [11 x i8] c", label %n\00" -@.str2930 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2931 = private unnamed_addr constant [2 x i8] c"h\00" -@.str2932 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" -@.str2933 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2934 = private unnamed_addr constant [2 x i8] c"n\00" -@.str2935 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2936 = private unnamed_addr constant [16 x i8] c" ret i32 0\0A}\0A\0A\00" -@.str2937 = private unnamed_addr constant [38 x i8] c"define i32 @L_owner(i32 %e) {\0Aentry:\0A\00" -@.str2938 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" -@.str2939 = private unnamed_addr constant [82 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A %v = load i32, ptr %p\0A ret i32 %v\0A}\0A\0A\00" -@.str2940 = private unnamed_addr constant [52 x i8] c"define void @L_set_owner(i32 %e, i32 %id) {\0Aentry:\0A\00" -@.str2941 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" -@.str2942 = private unnamed_addr constant [80 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A store i32 %id, ptr %p\0A ret void\0A}\0A\0A\00" -@.str2943 = private unnamed_addr constant [41 x i8] c"define i32 @L_is_owner(i32 %e) {\0Aentry:\0A\00" -@.str2944 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" -@.str2945 = private unnamed_addr constant [66 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A %o = load i32, ptr %p\0A\00" -@.str2946 = private unnamed_addr constant [106 x i8] c" %lid = load i32, ptr @L_localid\0A %eq = icmp eq i32 %o, %lid\0A %r = zext i1 %eq to i32\0A ret i32 %r\0A}\0A\0A\00" -@.str2947 = private unnamed_addr constant [62 x i8] c"@L_netq = internal global [64 x [2048 x i8]] zeroinitializer\0A\00" -@.str2948 = private unnamed_addr constant [56 x i8] c"@L_netlen = internal global [64 x i32] zeroinitializer\0A\00" -@.str2949 = private unnamed_addr constant [36 x i8] c"@L_nethead = internal global i32 0\0A\00" -@.str2950 = private unnamed_addr constant [36 x i8] c"@L_nettail = internal global i32 0\0A\00" -@.str2951 = private unnamed_addr constant [65 x i8] c"define void @L_net_send(i32 %peer, ptr %buf, i32 %len) {\0Aentry:\0A\00" -@.str2952 = private unnamed_addr constant [71 x i8] c" %l0 = icmp slt i32 %len, 0\0A %len1 = select i1 %l0, i32 0, i32 %len\0A\00" -@.str2953 = private unnamed_addr constant [76 x i8] c" %l1 = icmp sgt i32 %len1, 2048\0A %n = select i1 %l1, i32 2048, i32 %len1\0A\00" -@.str2954 = private unnamed_addr constant [65 x i8] c" %t = load i32, ptr @L_nettail\0A %h = load i32, ptr @L_nethead\0A\00" -@.str2955 = private unnamed_addr constant [78 x i8] c" %t1 = add i32 %t, 1\0A %tn = srem i32 %t1, 64\0A %full = icmp eq i32 %tn, %h\0A\00" -@.str2956 = private unnamed_addr constant [39 x i8] c" br i1 %full, label %drop, label %go\0A\00" -@.str2957 = private unnamed_addr constant [5 x i8] c"go:\0A\00" -@.str2958 = private unnamed_addr constant [80 x i8] c" %row = getelementptr inbounds [64 x [2048 x i8]], ptr @L_netq, i32 0, i32 %t\0A\00" -@.str2959 = private unnamed_addr constant [76 x i8] c" %nz = zext i32 %n to i64\0A call ptr @memcpy(ptr %row, ptr %buf, i64 %nz)\0A\00" -@.str2960 = private unnamed_addr constant [97 x i8] c" %lp = getelementptr inbounds [64 x i32], ptr @L_netlen, i32 0, i32 %t\0A store i32 %n, ptr %lp\0A\00" -@.str2961 = private unnamed_addr constant [50 x i8] c" store i32 %tn, ptr @L_nettail\0A br label %drop\0A\00" -@.str2962 = private unnamed_addr constant [21 x i8] c"drop:\0A ret void\0A}\0A\0A\00" -@.str2963 = private unnamed_addr constant [53 x i8] c"define i32 @L_net_poll(ptr %buf, i32 %cap) {\0Aentry:\0A\00" -@.str2964 = private unnamed_addr constant [95 x i8] c" %h = load i32, ptr @L_nethead\0A %t = load i32, ptr @L_nettail\0A %empty = icmp eq i32 %h, %t\0A\00" -@.str2965 = private unnamed_addr constant [40 x i8] c" br i1 %empty, label %none, label %go\0A\00" -@.str2966 = private unnamed_addr constant [5 x i8] c"go:\0A\00" -@.str2967 = private unnamed_addr constant [99 x i8] c" %lp = getelementptr inbounds [64 x i32], ptr @L_netlen, i32 0, i32 %h\0A %ln = load i32, ptr %lp\0A\00" -@.str2968 = private unnamed_addr constant [74 x i8] c" %big = icmp sgt i32 %ln, %cap\0A %n = select i1 %big, i32 %cap, i32 %ln\0A\00" -@.str2969 = private unnamed_addr constant [80 x i8] c" %row = getelementptr inbounds [64 x [2048 x i8]], ptr @L_netq, i32 0, i32 %h\0A\00" -@.str2970 = private unnamed_addr constant [76 x i8] c" %nz = zext i32 %n to i64\0A call ptr @memcpy(ptr %buf, ptr %row, i64 %nz)\0A\00" -@.str2971 = private unnamed_addr constant [93 x i8] c" %h1 = add i32 %h, 1\0A %hn = srem i32 %h1, 64\0A store i32 %hn, ptr @L_nethead\0A ret i32 %n\0A\00" -@.str2972 = private unnamed_addr constant [22 x i8] c"none:\0A ret i32 0\0A}\0A\0A\00" -@.str2973 = private unnamed_addr constant [9 x i8] c"net_send\00" -@.str2974 = private unnamed_addr constant [11 x i8] c"L_net_send\00" -@.str2975 = private unnamed_addr constant [9 x i8] c"net_poll\00" -@.str2976 = private unnamed_addr constant [11 x i8] c"L_net_poll\00" -@.str2977 = private unnamed_addr constant [58 x i8] c"@L_recvbuf = internal global [2048 x i8] zeroinitializer\0A\00" -@.str2978 = private unnamed_addr constant [9 x i8] c"net_poll\00" -@.str2979 = private unnamed_addr constant [53 x i8] c"define void @L_net_pump() {\0Aentry:\0A br label %loop\0A\00" -@.str2980 = private unnamed_addr constant [24 x i8] c"loop:\0A %n = call i32 @\00" -@.str2981 = private unnamed_addr constant [28 x i8] c"(ptr @L_recvbuf, i32 2048)\0A\00" -@.str2982 = private unnamed_addr constant [68 x i8] c" %done = icmp eq i32 %n, 0\0A br i1 %done, label %fin, label %body\0A\00" -@.str2983 = private unnamed_addr constant [41 x i8] c"body:\0A %eid = load i32, ptr @L_recvbuf\0A\00" -@.str2984 = private unnamed_addr constant [5 x i8] c" %c\00" -@.str2985 = private unnamed_addr constant [22 x i8] c" = icmp eq i32 %eid, \00" -@.str2986 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2987 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" -@.str2988 = private unnamed_addr constant [11 x i8] c", label %h\00" -@.str2989 = private unnamed_addr constant [11 x i8] c", label %x\00" -@.str2990 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2991 = private unnamed_addr constant [2 x i8] c"h\00" -@.str2992 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str2993 = private unnamed_addr constant [2 x i8] c"_\00" -@.str2994 = private unnamed_addr constant [6 x i8] c" %fa\00" -@.str2995 = private unnamed_addr constant [51 x i8] c" = getelementptr inbounds i8, ptr @L_recvbuf, i32 \00" -@.str2996 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str2997 = private unnamed_addr constant [6 x i8] c" %fv\00" -@.str2998 = private unnamed_addr constant [9 x i8] c" = load \00" -@.str2999 = private unnamed_addr constant [10 x i8] c", ptr %fa\00" -@.str3000 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3001 = private unnamed_addr constant [3 x i8] c", \00" -@.str3002 = private unnamed_addr constant [5 x i8] c" %fv\00" -@.str3003 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" -@.str3004 = private unnamed_addr constant [2 x i8] c"(\00" -@.str3005 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str3006 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str3007 = private unnamed_addr constant [2 x i8] c"x\00" -@.str3008 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str3009 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str3010 = private unnamed_addr constant [20 x i8] c"fin:\0A ret void\0A}\0A\0A\00" -@.str3011 = private unnamed_addr constant [58 x i8] c"@L_sendbuf = internal global [2048 x i8] zeroinitializer\0A\00" -@.str3012 = private unnamed_addr constant [6 x i8] c"panel\00" -@.str3013 = private unnamed_addr constant [4 x i8] c"col\00" -@.str3014 = private unnamed_addr constant [4 x i8] c"row\00" -@.str3015 = private unnamed_addr constant [6 x i8] c"label\00" -@.str3016 = private unnamed_addr constant [7 x i8] c"button\00" -@.str3017 = private unnamed_addr constant [6 x i8] c"image\00" -@.str3018 = private unnamed_addr constant [7 x i8] c"spacer\00" -@.str3019 = private unnamed_addr constant [3 x i8] c"id\00" -@.str3020 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" -@.str3021 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str3022 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str3023 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str3024 = private unnamed_addr constant [2 x i8] c"w\00" -@.str3025 = private unnamed_addr constant [2 x i8] c"h\00" -@.str3026 = private unnamed_addr constant [2 x i8] c"x\00" -@.str3027 = private unnamed_addr constant [2 x i8] c"y\00" -@.str3028 = private unnamed_addr constant [4 x i8] c"pad\00" -@.str3029 = private unnamed_addr constant [4 x i8] c"gap\00" -@.str3030 = private unnamed_addr constant [3 x i8] c"bg\00" -@.str3031 = private unnamed_addr constant [3 x i8] c"fg\00" -@.str3032 = private unnamed_addr constant [7 x i8] c"border\00" -@.str3033 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str3034 = private unnamed_addr constant [5 x i8] c"font\00" -@.str3035 = private unnamed_addr constant [5 x i8] c"size\00" -@.str3036 = private unnamed_addr constant [6 x i8] c"inset\00" -@.str3037 = private unnamed_addr constant [6 x i8] c"focus\00" -@.str3038 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" -@.str3039 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str3040 = private unnamed_addr constant [2 x i8] c"1\00" -@.str3041 = private unnamed_addr constant [3 x i8] c"id\00" -@.str3042 = private unnamed_addr constant [5 x i8] c"text\00" -@.str3043 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" -@.str3044 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str3045 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str3046 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str3047 = private unnamed_addr constant [6 x i8] c"image\00" -@.str3048 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" -@.str3049 = private unnamed_addr constant [2 x i8] c")\00" -@.str3050 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str3051 = private unnamed_addr constant [6 x i8] c"align\00" -@.str3052 = private unnamed_addr constant [7 x i8] c"center\00" -@.str3053 = private unnamed_addr constant [4 x i8] c"end\00" -@.str3054 = private unnamed_addr constant [2 x i8] c"1\00" -@.str3055 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" -@.str3056 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str3057 = private unnamed_addr constant [3 x i8] c", \00" -@.str3058 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str3059 = private unnamed_addr constant [5 x i8] c"void\00" -@.str3060 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" -@.str3061 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3062 = private unnamed_addr constant [9 x i8] c" store \00" -@.str3063 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str3064 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str3065 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3066 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str3067 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str3068 = private unnamed_addr constant [5 x i8] c"void\00" -@.str3069 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str3070 = private unnamed_addr constant [6 x i8] c"load \00" -@.str3071 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" -@.str3072 = private unnamed_addr constant [7 x i8] c" ret \00" -@.str3073 = private unnamed_addr constant [2 x i8] c" \00" -@.str3074 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3075 = private unnamed_addr constant [8 x i8] c"define \00" -@.str3076 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str3077 = private unnamed_addr constant [2 x i8] c"(\00" -@.str3078 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" -@.str3079 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str3080 = private unnamed_addr constant [4 x i8] c"int\00" -@.str3081 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" -@.str3082 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str3083 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str3084 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" -@.str3085 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str3086 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str3087 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" -@.str3088 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str3089 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3090 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str3091 = private unnamed_addr constant [3 x i8] c"}\0A\00" -@.str3092 = private unnamed_addr constant [3 x i8] c"wb\00" -@.str3093 = private unnamed_addr constant [7 x i8] c".ludic\00" -@.str3094 = private unnamed_addr constant [2 x i8] c"/\00" -@.str3095 = private unnamed_addr constant [6 x i8] c"ludic\00" -@.str3096 = private unnamed_addr constant [11 x i8] c"--windowed\00" -@.str3097 = private unnamed_addr constant [11 x i8] c"--headless\00" -@.str3098 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" -@.str3099 = private unnamed_addr constant [6 x i8] c"--fmt\00" -@.str3100 = private unnamed_addr constant [13 x i8] c"--save-temps\00" -@.str3101 = private unnamed_addr constant [6 x i8] c"--run\00" -@.str3102 = private unnamed_addr constant [3 x i8] c"-o\00" -@.str3103 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" -@.str3104 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str3105 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" -@.str3106 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" -@.str3107 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" -@.str3108 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" -@.str3109 = private unnamed_addr constant [4 x i8] c".ll\00" -@.str3110 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" -@.str3111 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" -@.str3112 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str3113 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" -@.str3114 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" -@.str3115 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" -@.str3116 = private unnamed_addr constant [2 x i8] c" \00" -@.str3117 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" -@.str3118 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str3119 = private unnamed_addr constant [7 x i8] c"rm -f \00" -@.str3120 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" +@.str2725 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str2726 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2727 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str2728 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2729 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2730 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str2731 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str2732 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2733 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2734 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str2735 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2736 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2737 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str2738 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str2739 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str2740 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str2741 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2742 = private unnamed_addr constant [2 x i8] c"<\00" +@.str2743 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str2744 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str2745 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str2746 = private unnamed_addr constant [2 x i8] c">\00" +@.str2747 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str2748 = private unnamed_addr constant [3 x i8] c">=\00" +@.str2749 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str2750 = private unnamed_addr constant [3 x i8] c"==\00" +@.str2751 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str2752 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str2753 = private unnamed_addr constant [2 x i8] c"<\00" +@.str2754 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str2755 = private unnamed_addr constant [2 x i8] c">\00" +@.str2756 = private unnamed_addr constant [3 x i8] c">=\00" +@.str2757 = private unnamed_addr constant [3 x i8] c"==\00" +@.str2758 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str2759 = private unnamed_addr constant [2 x i8] c"+\00" +@.str2760 = private unnamed_addr constant [4 x i8] c"add\00" +@.str2761 = private unnamed_addr constant [2 x i8] c"-\00" +@.str2762 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str2763 = private unnamed_addr constant [2 x i8] c"*\00" +@.str2764 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str2765 = private unnamed_addr constant [2 x i8] c"/\00" +@.str2766 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str2767 = private unnamed_addr constant [2 x i8] c"&\00" +@.str2768 = private unnamed_addr constant [4 x i8] c"and\00" +@.str2769 = private unnamed_addr constant [2 x i8] c"|\00" +@.str2770 = private unnamed_addr constant [3 x i8] c"or\00" +@.str2771 = private unnamed_addr constant [2 x i8] c"^\00" +@.str2772 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str2773 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str2774 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str2775 = private unnamed_addr constant [3 x i8] c">>\00" +@.str2776 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str2777 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str2778 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2779 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str2780 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2781 = private unnamed_addr constant [2 x i8] c"+\00" +@.str2782 = private unnamed_addr constant [29 x i8] c"call ptr @fn_str_concat(ptr \00" +@.str2783 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2784 = private unnamed_addr constant [2 x i8] c")\00" +@.str2785 = private unnamed_addr constant [4 x i8] c"str\00" +@.str2786 = private unnamed_addr constant [25 x i8] c"call i32 @fn_str_eq(ptr \00" +@.str2787 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str2788 = private unnamed_addr constant [2 x i8] c")\00" +@.str2789 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str2790 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str2791 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str2792 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2793 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2794 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2795 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2796 = private unnamed_addr constant [4 x i8] c"and\00" +@.str2797 = private unnamed_addr constant [3 x i8] c"or\00" +@.str2798 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2799 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2800 = private unnamed_addr constant [2 x i8] c"+\00" +@.str2801 = private unnamed_addr constant [2 x i8] c"+\00" +@.str2802 = private unnamed_addr constant [3 x i8] c"==\00" +@.str2803 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str2804 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2805 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2806 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str2807 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2808 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2809 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str2810 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str2811 = private unnamed_addr constant [2 x i8] c" \00" +@.str2812 = private unnamed_addr constant [2 x i8] c" \00" +@.str2813 = private unnamed_addr constant [3 x i8] c", \00" +@.str2814 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str2815 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2816 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str2817 = private unnamed_addr constant [2 x i8] c"*\00" +@.str2818 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2819 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2820 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2821 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2822 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str2823 = private unnamed_addr constant [3 x i8] c", \00" +@.str2824 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" +@.str2825 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2826 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str2827 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2828 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2829 = private unnamed_addr constant [2 x i8] c"/\00" +@.str2830 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2831 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2832 = private unnamed_addr constant [9 x i8] c"shl i64 \00" +@.str2833 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str2834 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str2835 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str2836 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str2837 = private unnamed_addr constant [3 x i8] c", \00" +@.str2838 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str2839 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str2840 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2841 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str2842 = private unnamed_addr constant [3 x i8] c", \00" +@.str2843 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str2844 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str2845 = private unnamed_addr constant [3 x i8] c", \00" +@.str2846 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2847 = private unnamed_addr constant [59 x i8] c"named and positional arguments cannot be mixed in one call\00" +@.str2848 = private unnamed_addr constant [26 x i8] c"wrong number of arguments\00" +@.str2849 = private unnamed_addr constant [19 x i8] c"no argument named \00" +@.str2850 = private unnamed_addr constant [5 x i8] c"Math\00" +@.str2851 = private unnamed_addr constant [22 x i8] c"unknown builtin Math.\00" +@.str2852 = private unnamed_addr constant [5 x i8] c"Text\00" +@.str2853 = private unnamed_addr constant [22 x i8] c"unknown builtin Text.\00" +@.str2854 = private unnamed_addr constant [5 x i8] c"List\00" +@.str2855 = private unnamed_addr constant [22 x i8] c"unknown builtin List.\00" +@.str2856 = private unnamed_addr constant [5 x i8] c"Ease\00" +@.str2857 = private unnamed_addr constant [22 x i8] c"unknown builtin Ease.\00" +@.str2858 = private unnamed_addr constant [8 x i8] c"Collide\00" +@.str2859 = private unnamed_addr constant [25 x i8] c"unknown builtin Collide.\00" +@.str2860 = private unnamed_addr constant [4 x i8] c"Mem\00" +@.str2861 = private unnamed_addr constant [21 x i8] c"unknown builtin Mem.\00" +@.str2862 = private unnamed_addr constant [6 x i8] c"Color\00" +@.str2863 = private unnamed_addr constant [23 x i8] c"unknown builtin Color.\00" +@.str2864 = private unnamed_addr constant [5 x i8] c"Time\00" +@.str2865 = private unnamed_addr constant [22 x i8] c"unknown builtin Time.\00" +@.str2866 = private unnamed_addr constant [7 x i8] c"Screen\00" +@.str2867 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str2868 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str2869 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2870 = private unnamed_addr constant [15 x i8] c"fill_rectangle\00" +@.str2871 = private unnamed_addr constant [10 x i8] c"fill_rect\00" +@.str2872 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2873 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2874 = private unnamed_addr constant [6 x i8] c"width\00" +@.str2875 = private unnamed_addr constant [7 x i8] c"height\00" +@.str2876 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2877 = private unnamed_addr constant [15 x i8] c"draw_rectangle\00" +@.str2878 = private unnamed_addr constant [11 x i8] c"frame_rect\00" +@.str2879 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2880 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2881 = private unnamed_addr constant [6 x i8] c"width\00" +@.str2882 = private unnamed_addr constant [7 x i8] c"height\00" +@.str2883 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2884 = private unnamed_addr constant [10 x i8] c"put_pixel\00" +@.str2885 = private unnamed_addr constant [7 x i8] c"put_px\00" +@.str2886 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2887 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2888 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2889 = private unnamed_addr constant [10 x i8] c"draw_text\00" +@.str2890 = private unnamed_addr constant [5 x i8] c"text\00" +@.str2891 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2892 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2893 = private unnamed_addr constant [5 x i8] c"text\00" +@.str2894 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2895 = private unnamed_addr constant [6 x i8] c"scale\00" +@.str2896 = private unnamed_addr constant [12 x i8] c"draw_number\00" +@.str2897 = private unnamed_addr constant [9 x i8] c"text_int\00" +@.str2898 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2899 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2900 = private unnamed_addr constant [6 x i8] c"value\00" +@.str2901 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2902 = private unnamed_addr constant [6 x i8] c"scale\00" +@.str2903 = private unnamed_addr constant [5 x i8] c"show\00" +@.str2904 = private unnamed_addr constant [8 x i8] c"present\00" +@.str2905 = private unnamed_addr constant [6 x i8] c"width\00" +@.str2906 = private unnamed_addr constant [9 x i8] c"screen_w\00" +@.str2907 = private unnamed_addr constant [7 x i8] c"height\00" +@.str2908 = private unnamed_addr constant [9 x i8] c"screen_h\00" +@.str2909 = private unnamed_addr constant [7 x i8] c"status\00" +@.str2910 = private unnamed_addr constant [7 x i8] c"status\00" +@.str2911 = private unnamed_addr constant [5 x i8] c"text\00" +@.str2912 = private unnamed_addr constant [5 x i8] c"line\00" +@.str2913 = private unnamed_addr constant [5 x i8] c"line\00" +@.str2914 = private unnamed_addr constant [3 x i8] c"x1\00" +@.str2915 = private unnamed_addr constant [3 x i8] c"y1\00" +@.str2916 = private unnamed_addr constant [3 x i8] c"x2\00" +@.str2917 = private unnamed_addr constant [3 x i8] c"y2\00" +@.str2918 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2919 = private unnamed_addr constant [7 x i8] c"circle\00" +@.str2920 = private unnamed_addr constant [7 x i8] c"circle\00" +@.str2921 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2922 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2923 = private unnamed_addr constant [7 x i8] c"radius\00" +@.str2924 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2925 = private unnamed_addr constant [12 x i8] c"fill_circle\00" +@.str2926 = private unnamed_addr constant [12 x i8] c"fill_circle\00" +@.str2927 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2928 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2929 = private unnamed_addr constant [7 x i8] c"radius\00" +@.str2930 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2931 = private unnamed_addr constant [9 x i8] c"triangle\00" +@.str2932 = private unnamed_addr constant [9 x i8] c"triangle\00" +@.str2933 = private unnamed_addr constant [3 x i8] c"x1\00" +@.str2934 = private unnamed_addr constant [3 x i8] c"y1\00" +@.str2935 = private unnamed_addr constant [3 x i8] c"x2\00" +@.str2936 = private unnamed_addr constant [3 x i8] c"y2\00" +@.str2937 = private unnamed_addr constant [3 x i8] c"x3\00" +@.str2938 = private unnamed_addr constant [3 x i8] c"y3\00" +@.str2939 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2940 = private unnamed_addr constant [14 x i8] c"fill_triangle\00" +@.str2941 = private unnamed_addr constant [14 x i8] c"fill_triangle\00" +@.str2942 = private unnamed_addr constant [3 x i8] c"x1\00" +@.str2943 = private unnamed_addr constant [3 x i8] c"y1\00" +@.str2944 = private unnamed_addr constant [3 x i8] c"x2\00" +@.str2945 = private unnamed_addr constant [3 x i8] c"y2\00" +@.str2946 = private unnamed_addr constant [3 x i8] c"x3\00" +@.str2947 = private unnamed_addr constant [3 x i8] c"y3\00" +@.str2948 = private unnamed_addr constant [6 x i8] c"color\00" +@.str2949 = private unnamed_addr constant [7 x i8] c"sprite\00" +@.str2950 = private unnamed_addr constant [12 x i8] c"draw_sprite\00" +@.str2951 = private unnamed_addr constant [3 x i8] c"id\00" +@.str2952 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2953 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2954 = private unnamed_addr constant [14 x i8] c"sprite_scaled\00" +@.str2955 = private unnamed_addr constant [19 x i8] c"draw_sprite_scaled\00" +@.str2956 = private unnamed_addr constant [3 x i8] c"id\00" +@.str2957 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2958 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2959 = private unnamed_addr constant [6 x i8] c"scale\00" +@.str2960 = private unnamed_addr constant [4 x i8] c"Map\00" +@.str2961 = private unnamed_addr constant [5 x i8] c"size\00" +@.str2962 = private unnamed_addr constant [9 x i8] c"map_size\00" +@.str2963 = private unnamed_addr constant [6 x i8] c"width\00" +@.str2964 = private unnamed_addr constant [7 x i8] c"height\00" +@.str2965 = private unnamed_addr constant [4 x i8] c"row\00" +@.str2966 = private unnamed_addr constant [8 x i8] c"map_row\00" +@.str2967 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2968 = private unnamed_addr constant [6 x i8] c"cells\00" +@.str2969 = private unnamed_addr constant [5 x i8] c"tile\00" +@.str2970 = private unnamed_addr constant [5 x i8] c"tile\00" +@.str2971 = private unnamed_addr constant [2 x i8] c"x\00" +@.str2972 = private unnamed_addr constant [2 x i8] c"y\00" +@.str2973 = private unnamed_addr constant [7 x i8] c"Random\00" +@.str2974 = private unnamed_addr constant [6 x i8] c"range\00" +@.str2975 = private unnamed_addr constant [10 x i8] c"rng_range\00" +@.str2976 = private unnamed_addr constant [4 x i8] c"low\00" +@.str2977 = private unnamed_addr constant [5 x i8] c"high\00" +@.str2978 = private unnamed_addr constant [7 x i8] c"chance\00" +@.str2979 = private unnamed_addr constant [11 x i8] c"rng_chance\00" +@.str2980 = private unnamed_addr constant [8 x i8] c"percent\00" +@.str2981 = private unnamed_addr constant [5 x i8] c"seed\00" +@.str2982 = private unnamed_addr constant [5 x i8] c"seed\00" +@.str2983 = private unnamed_addr constant [6 x i8] c"value\00" +@.str2984 = private unnamed_addr constant [6 x i8] c"value\00" +@.str2985 = private unnamed_addr constant [10 x i8] c"rng_value\00" +@.str2986 = private unnamed_addr constant [4 x i8] c"int\00" +@.str2987 = private unnamed_addr constant [8 x i8] c"rng_int\00" +@.str2988 = private unnamed_addr constant [4 x i8] c"max\00" +@.str2989 = private unnamed_addr constant [5 x i8] c"sign\00" +@.str2990 = private unnamed_addr constant [9 x i8] c"rng_sign\00" +@.str2991 = private unnamed_addr constant [6 x i8] c"Input\00" +@.str2992 = private unnamed_addr constant [4 x i8] c"key\00" +@.str2993 = private unnamed_addr constant [4 x i8] c"key\00" +@.str2994 = private unnamed_addr constant [6 x i8] c"World\00" +@.str2995 = private unnamed_addr constant [4 x i8] c"get\00" +@.str2996 = private unnamed_addr constant [10 x i8] c"world_get\00" +@.str2997 = private unnamed_addr constant [4 x i8] c"set\00" +@.str2998 = private unnamed_addr constant [10 x i8] c"world_set\00" +@.str2999 = private unnamed_addr constant [4 x i8] c"has\00" +@.str3000 = private unnamed_addr constant [10 x i8] c"world_has\00" +@.str3001 = private unnamed_addr constant [6 x i8] c"count\00" +@.str3002 = private unnamed_addr constant [12 x i8] c"world_count\00" +@.str3003 = private unnamed_addr constant [5 x i8] c"size\00" +@.str3004 = private unnamed_addr constant [11 x i8] c"world_size\00" +@.str3005 = private unnamed_addr constant [6 x i8] c"spawn\00" +@.str3006 = private unnamed_addr constant [12 x i8] c"world_spawn\00" +@.str3007 = private unnamed_addr constant [5 x i8] c"save\00" +@.str3008 = private unnamed_addr constant [11 x i8] c"world_save\00" +@.str3009 = private unnamed_addr constant [5 x i8] c"load\00" +@.str3010 = private unnamed_addr constant [11 x i8] c"world_load\00" +@.str3011 = private unnamed_addr constant [8 x i8] c"prop_id\00" +@.str3012 = private unnamed_addr constant [14 x i8] c"world_prop_id\00" +@.str3013 = private unnamed_addr constant [9 x i8] c"field_id\00" +@.str3014 = private unnamed_addr constant [15 x i8] c"world_field_id\00" +@.str3015 = private unnamed_addr constant [9 x i8] c"model_id\00" +@.str3016 = private unnamed_addr constant [15 x i8] c"world_model_id\00" +@.str3017 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str3018 = private unnamed_addr constant [11 x i8] c"world_kind\00" +@.str3019 = private unnamed_addr constant [14 x i8] c"register_prop\00" +@.str3020 = private unnamed_addr constant [20 x i8] c"world_register_prop\00" +@.str3021 = private unnamed_addr constant [7 x i8] c"attach\00" +@.str3022 = private unnamed_addr constant [17 x i8] c"world_attach_dyn\00" +@.str3023 = private unnamed_addr constant [7 x i8] c"detach\00" +@.str3024 = private unnamed_addr constant [17 x i8] c"world_detach_dyn\00" +@.str3025 = private unnamed_addr constant [11 x i8] c"query_next\00" +@.str3026 = private unnamed_addr constant [17 x i8] c"world_query_next\00" +@.str3027 = private unnamed_addr constant [4 x i8] c"Net\00" +@.str3028 = private unnamed_addr constant [5 x i8] c"send\00" +@.str3029 = private unnamed_addr constant [9 x i8] c"net_send\00" +@.str3030 = private unnamed_addr constant [5 x i8] c"poll\00" +@.str3031 = private unnamed_addr constant [9 x i8] c"net_poll\00" +@.str3032 = private unnamed_addr constant [10 x i8] c"serialize\00" +@.str3033 = private unnamed_addr constant [10 x i8] c"serialize\00" +@.str3034 = private unnamed_addr constant [6 x i8] c"apply\00" +@.str3035 = private unnamed_addr constant [6 x i8] c"apply\00" +@.str3036 = private unnamed_addr constant [6 x i8] c"owner\00" +@.str3037 = private unnamed_addr constant [6 x i8] c"owner\00" +@.str3038 = private unnamed_addr constant [10 x i8] c"set_owner\00" +@.str3039 = private unnamed_addr constant [10 x i8] c"set_owner\00" +@.str3040 = private unnamed_addr constant [10 x i8] c"is_server\00" +@.str3041 = private unnamed_addr constant [10 x i8] c"is_server\00" +@.str3042 = private unnamed_addr constant [9 x i8] c"is_owner\00" +@.str3043 = private unnamed_addr constant [9 x i8] c"is_owner\00" +@.str3044 = private unnamed_addr constant [9 x i8] c"local_id\00" +@.str3045 = private unnamed_addr constant [9 x i8] c"local_id\00" +@.str3046 = private unnamed_addr constant [4 x i8] c"Sys\00" +@.str3047 = private unnamed_addr constant [4 x i8] c"arg\00" +@.str3048 = private unnamed_addr constant [4 x i8] c"arg\00" +@.str3049 = private unnamed_addr constant [10 x i8] c"arg_count\00" +@.str3050 = private unnamed_addr constant [10 x i8] c"arg_count\00" +@.str3051 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str3052 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str3053 = private unnamed_addr constant [4 x i8] c"run\00" +@.str3054 = private unnamed_addr constant [4 x i8] c"run\00" +@.str3055 = private unnamed_addr constant [4 x i8] c"env\00" +@.str3056 = private unnamed_addr constant [7 x i8] c"getenv\00" +@.str3057 = private unnamed_addr constant [10 x i8] c"read_char\00" +@.str3058 = private unnamed_addr constant [10 x i8] c"read_char\00" +@.str3059 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str3060 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str3061 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str3062 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str3063 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str3064 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str3065 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str3066 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str3067 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str3068 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str3069 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str3070 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str3071 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str3072 = private unnamed_addr constant [12 x i8] c"file_stdout\00" +@.str3073 = private unnamed_addr constant [7 x i8] c"stderr\00" +@.str3074 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str3075 = private unnamed_addr constant [5 x i8] c"Save\00" +@.str3076 = private unnamed_addr constant [6 x i8] c"write\00" +@.str3077 = private unnamed_addr constant [5 x i8] c"save\00" +@.str3078 = private unnamed_addr constant [5 x i8] c"read\00" +@.str3079 = private unnamed_addr constant [5 x i8] c"load\00" +@.str3080 = private unnamed_addr constant [17 x i8] c"unknown builtin \00" +@.str3081 = private unnamed_addr constant [2 x i8] c".\00" +@.str3082 = private unnamed_addr constant [30 x i8] c"call target is not a function\00" +@.str3083 = private unnamed_addr constant [5 x i8] c"self\00" +@.str3084 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3085 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str3086 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3087 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str3088 = private unnamed_addr constant [4 x i8] c"key\00" +@.str3089 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" +@.str3090 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3091 = private unnamed_addr constant [5 x i8] c"save\00" +@.str3092 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" +@.str3093 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3094 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3095 = private unnamed_addr constant [9 x i8] c"ui_build\00" +@.str3096 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" +@.str3097 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3098 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3099 = private unnamed_addr constant [5 x i8] c"load\00" +@.str3100 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" +@.str3101 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str3102 = private unnamed_addr constant [11 x i8] c"world_size\00" +@.str3103 = private unnamed_addr constant [25 x i8] c"call i32 @L_world_size()\00" +@.str3104 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3105 = private unnamed_addr constant [11 x i8] c"world_save\00" +@.str3106 = private unnamed_addr constant [28 x i8] c"call i32 @L_world_save(ptr \00" +@.str3107 = private unnamed_addr constant [2 x i8] c")\00" +@.str3108 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3109 = private unnamed_addr constant [11 x i8] c"world_load\00" +@.str3110 = private unnamed_addr constant [31 x i8] c" call void @L_world_load(ptr \00" +@.str3111 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3112 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3113 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3114 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3115 = private unnamed_addr constant [5 x i8] c"quit\00" +@.str3116 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" +@.str3117 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3118 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3119 = private unnamed_addr constant [10 x i8] c"serialize\00" +@.str3120 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_serialize(i32 \00" +@.str3121 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3122 = private unnamed_addr constant [2 x i8] c")\00" +@.str3123 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3124 = private unnamed_addr constant [6 x i8] c"apply\00" +@.str3125 = private unnamed_addr constant [30 x i8] c" call void @ludic_apply(i32 \00" +@.str3126 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3127 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3128 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3129 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3130 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3131 = private unnamed_addr constant [10 x i8] c"sync_size\00" +@.str3132 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_sync_size(i32 \00" +@.str3133 = private unnamed_addr constant [2 x i8] c")\00" +@.str3134 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3135 = private unnamed_addr constant [6 x i8] c"owner\00" +@.str3136 = private unnamed_addr constant [23 x i8] c"call i32 @L_owner(i32 \00" +@.str3137 = private unnamed_addr constant [2 x i8] c")\00" +@.str3138 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3139 = private unnamed_addr constant [10 x i8] c"set_owner\00" +@.str3140 = private unnamed_addr constant [30 x i8] c" call void @L_set_owner(i32 \00" +@.str3141 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3142 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3143 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3144 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3145 = private unnamed_addr constant [9 x i8] c"is_owner\00" +@.str3146 = private unnamed_addr constant [26 x i8] c"call i32 @L_is_owner(i32 \00" +@.str3147 = private unnamed_addr constant [2 x i8] c")\00" +@.str3148 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str3149 = private unnamed_addr constant [10 x i8] c"is_server\00" +@.str3150 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_role\00" +@.str3151 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3152 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str3153 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str3154 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str3155 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str3156 = private unnamed_addr constant [9 x i8] c"local_id\00" +@.str3157 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_localid\00" +@.str3158 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3159 = private unnamed_addr constant [9 x i8] c"net_pump\00" +@.str3160 = private unnamed_addr constant [27 x i8] c" call void @L_net_pump()\0A\00" +@.str3161 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3162 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3163 = private unnamed_addr constant [11 x i8] c"tick_fixed\00" +@.str3164 = private unnamed_addr constant [29 x i8] c" call void @L_tick_fixed()\0A\00" +@.str3165 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3166 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3167 = private unnamed_addr constant [12 x i8] c"tick_render\00" +@.str3168 = private unnamed_addr constant [30 x i8] c" call void @L_tick_render()\0A\00" +@.str3169 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3170 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3171 = private unnamed_addr constant [9 x i8] c"set_role\00" +@.str3172 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3173 = private unnamed_addr constant [15 x i8] c", ptr @L_role\0A\00" +@.str3174 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3175 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3176 = private unnamed_addr constant [13 x i8] c"set_local_id\00" +@.str3177 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3178 = private unnamed_addr constant [18 x i8] c", ptr @L_localid\0A\00" +@.str3179 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3180 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3181 = private unnamed_addr constant [9 x i8] c"net_send\00" +@.str3182 = private unnamed_addr constant [9 x i8] c"net_send\00" +@.str3183 = private unnamed_addr constant [29 x i8] c" call void @L_net_send(i32 \00" +@.str3184 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3185 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3186 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3187 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3188 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3189 = private unnamed_addr constant [9 x i8] c"net_poll\00" +@.str3190 = private unnamed_addr constant [9 x i8] c"net_poll\00" +@.str3191 = private unnamed_addr constant [26 x i8] c"call i32 @L_net_poll(ptr \00" +@.str3192 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3193 = private unnamed_addr constant [2 x i8] c")\00" +@.str3194 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3195 = private unnamed_addr constant [4 x i8] c"len\00" +@.str3196 = private unnamed_addr constant [5 x i8] c"push\00" +@.str3197 = private unnamed_addr constant [4 x i8] c"str\00" +@.str3198 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3199 = private unnamed_addr constant [26 x i8] c"call ptr @fn_int_str(i32 \00" +@.str3200 = private unnamed_addr constant [2 x i8] c")\00" +@.str3201 = private unnamed_addr constant [4 x i8] c"str\00" +@.str3202 = private unnamed_addr constant [6 x i8] c"print\00" +@.str3203 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3204 = private unnamed_addr constant [51 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_line, ptr \00" +@.str3205 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3206 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" +@.str3207 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3208 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3209 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3210 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str3211 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str3212 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str3213 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str3214 = private unnamed_addr constant [2 x i8] c")\00" +@.str3215 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3216 = private unnamed_addr constant [6 x i8] c"words\00" +@.str3217 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str3218 = private unnamed_addr constant [4 x i8] c", 4\00" +@.str3219 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str3220 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str3221 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str3222 = private unnamed_addr constant [2 x i8] c")\00" +@.str3223 = private unnamed_addr constant [6 x i8] c"words\00" +@.str3224 = private unnamed_addr constant [3 x i8] c"fx\00" +@.str3225 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str3226 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str3227 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str3228 = private unnamed_addr constant [4 x i8] c"flr\00" +@.str3229 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str3230 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str3231 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3232 = private unnamed_addr constant [14 x i8] c"world_prop_id\00" +@.str3233 = private unnamed_addr constant [29 x i8] c"call i32 @ludic_prop_id(ptr \00" +@.str3234 = private unnamed_addr constant [2 x i8] c")\00" +@.str3235 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3236 = private unnamed_addr constant [15 x i8] c"world_field_id\00" +@.str3237 = private unnamed_addr constant [30 x i8] c"call i32 @ludic_field_id(i32 \00" +@.str3238 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3239 = private unnamed_addr constant [2 x i8] c")\00" +@.str3240 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3241 = private unnamed_addr constant [10 x i8] c"world_get\00" +@.str3242 = private unnamed_addr constant [25 x i8] c"call i64 @ludic_get(i32 \00" +@.str3243 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3244 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3245 = private unnamed_addr constant [2 x i8] c")\00" +@.str3246 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str3247 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str3248 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3249 = private unnamed_addr constant [10 x i8] c"world_set\00" +@.str3250 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str3251 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str3252 = private unnamed_addr constant [28 x i8] c" call void @ludic_set(i32 \00" +@.str3253 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3254 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3255 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str3256 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3257 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3258 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3259 = private unnamed_addr constant [10 x i8] c"world_has\00" +@.str3260 = private unnamed_addr constant [25 x i8] c"call i32 @ludic_has(i32 \00" +@.str3261 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3262 = private unnamed_addr constant [2 x i8] c")\00" +@.str3263 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3264 = private unnamed_addr constant [12 x i8] c"world_count\00" +@.str3265 = private unnamed_addr constant [31 x i8] c"call i32 @ludic_entity_count()\00" +@.str3266 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3267 = private unnamed_addr constant [11 x i8] c"world_kind\00" +@.str3268 = private unnamed_addr constant [26 x i8] c"call i32 @ludic_kind(i32 \00" +@.str3269 = private unnamed_addr constant [2 x i8] c")\00" +@.str3270 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3271 = private unnamed_addr constant [15 x i8] c"world_model_id\00" +@.str3272 = private unnamed_addr constant [30 x i8] c"call i32 @ludic_model_id(ptr \00" +@.str3273 = private unnamed_addr constant [2 x i8] c")\00" +@.str3274 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3275 = private unnamed_addr constant [17 x i8] c"world_query_next\00" +@.str3276 = private unnamed_addr constant [32 x i8] c"call i32 @ludic_query_next(i32 \00" +@.str3277 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3278 = private unnamed_addr constant [2 x i8] c")\00" +@.str3279 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3280 = private unnamed_addr constant [20 x i8] c"world_register_prop\00" +@.str3281 = private unnamed_addr constant [35 x i8] c"call i32 @ludic_register_prop(ptr \00" +@.str3282 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3283 = private unnamed_addr constant [2 x i8] c")\00" +@.str3284 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3285 = private unnamed_addr constant [17 x i8] c"world_attach_dyn\00" +@.str3286 = private unnamed_addr constant [35 x i8] c" call void @ludic_attach_dyn(i32 \00" +@.str3287 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3288 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3289 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3290 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3291 = private unnamed_addr constant [17 x i8] c"world_detach_dyn\00" +@.str3292 = private unnamed_addr constant [35 x i8] c" call void @ludic_detach_dyn(i32 \00" +@.str3293 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3294 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3295 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3296 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3297 = private unnamed_addr constant [12 x i8] c"world_spawn\00" +@.str3298 = private unnamed_addr constant [27 x i8] c"call i32 @ludic_spawn(i32 \00" +@.str3299 = private unnamed_addr constant [2 x i8] c")\00" +@.str3300 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3301 = private unnamed_addr constant [3 x i8] c" \00" +@.str3302 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3303 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3304 = private unnamed_addr constant [4 x i8] c" = \00" +@.str3305 = private unnamed_addr constant [6 x i8] c"call \00" +@.str3306 = private unnamed_addr constant [3 x i8] c" @\00" +@.str3307 = private unnamed_addr constant [2 x i8] c"(\00" +@.str3308 = private unnamed_addr constant [3 x i8] c", \00" +@.str3309 = private unnamed_addr constant [2 x i8] c" \00" +@.str3310 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3311 = private unnamed_addr constant [4 x i8] c"rt_\00" +@.str3312 = private unnamed_addr constant [18 x i8] c"unknown function \00" +@.str3313 = private unnamed_addr constant [3 x i8] c" \00" +@.str3314 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3315 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3316 = private unnamed_addr constant [4 x i8] c" = \00" +@.str3317 = private unnamed_addr constant [6 x i8] c"call \00" +@.str3318 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str3319 = private unnamed_addr constant [2 x i8] c"(\00" +@.str3320 = private unnamed_addr constant [3 x i8] c", \00" +@.str3321 = private unnamed_addr constant [2 x i8] c" \00" +@.str3322 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3323 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3324 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3325 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3326 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str3327 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str3328 = private unnamed_addr constant [5 x i8] c"null\00" +@.str3329 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3330 = private unnamed_addr constant [28 x i8] c"call ptr @fn_str_slice(ptr \00" +@.str3331 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3332 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str3333 = private unnamed_addr constant [2 x i8] c")\00" +@.str3334 = private unnamed_addr constant [4 x i8] c"str\00" +@.str3335 = private unnamed_addr constant [4 x i8] c"str\00" +@.str3336 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3337 = private unnamed_addr constant [6 x i8] c"load \00" +@.str3338 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" +@.str3339 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3340 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" +@.str3341 = private unnamed_addr constant [6 x i8] c"Color\00" +@.str3342 = private unnamed_addr constant [21 x i8] c"unknown color Color.\00" +@.str3343 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3344 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3345 = private unnamed_addr constant [5 x i8] c"byte\00" +@.str3346 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str3347 = private unnamed_addr constant [9 x i8] c"zext i8 \00" +@.str3348 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str3349 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3350 = private unnamed_addr constant [2 x i8] c"-\00" +@.str3351 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str3352 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3353 = private unnamed_addr constant [2 x i8] c"~\00" +@.str3354 = private unnamed_addr constant [9 x i8] c"xor i32 \00" +@.str3355 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str3356 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3357 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3358 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3359 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str3360 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str3361 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str3362 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" +@.str3363 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3364 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3365 = private unnamed_addr constant [9 x i8] c" store \00" +@.str3366 = private unnamed_addr constant [2 x i8] c" \00" +@.str3367 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3368 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3369 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3370 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3371 = private unnamed_addr constant [29 x i8] c"cannot assign to immutable '\00" +@.str3372 = private unnamed_addr constant [41 x i8] c"' (declared with let; use var) \E2\80\94 line \00" +@.str3373 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" +@.str3374 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str3375 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" +@.str3376 = private unnamed_addr constant [2 x i8] c"=\00" +@.str3377 = private unnamed_addr constant [6 x i8] c"load \00" +@.str3378 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3379 = private unnamed_addr constant [4 x i8] c"add\00" +@.str3380 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str3381 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str3382 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str3383 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str3384 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str3385 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str3386 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str3387 = private unnamed_addr constant [3 x i8] c", \00" +@.str3388 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str3389 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" +@.str3390 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str3391 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3392 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3393 = private unnamed_addr constant [5 x i8] c"then\00" +@.str3394 = private unnamed_addr constant [5 x i8] c"else\00" +@.str3395 = private unnamed_addr constant [6 x i8] c"ifend\00" +@.str3396 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3397 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3398 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3399 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3400 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3401 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3402 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3403 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3404 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3405 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3406 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3407 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3408 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3409 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3410 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3411 = private unnamed_addr constant [6 x i8] c"wcond\00" +@.str3412 = private unnamed_addr constant [6 x i8] c"wbody\00" +@.str3413 = private unnamed_addr constant [5 x i8] c"wend\00" +@.str3414 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3415 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3416 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3417 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3418 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3419 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3420 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3421 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3422 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3423 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3424 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3425 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3426 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3427 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3428 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3429 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3430 = private unnamed_addr constant [6 x i8] c"fcond\00" +@.str3431 = private unnamed_addr constant [6 x i8] c"fbody\00" +@.str3432 = private unnamed_addr constant [6 x i8] c"fcont\00" +@.str3433 = private unnamed_addr constant [5 x i8] c"fend\00" +@.str3434 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3435 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3436 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3437 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3438 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str3439 = private unnamed_addr constant [3 x i8] c", \00" +@.str3440 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3441 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3442 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3443 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3444 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3445 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3446 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3447 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3448 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3449 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str3450 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str3451 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3452 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3453 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3454 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3455 = private unnamed_addr constant [8 x i8] c"%retval\00" +@.str3456 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str3457 = private unnamed_addr constant [2 x i8] c"_\00" +@.str3458 = private unnamed_addr constant [5 x i8] c"mend\00" +@.str3459 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3460 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3461 = private unnamed_addr constant [3 x i8] c", \00" +@.str3462 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str3463 = private unnamed_addr constant [3 x i8] c", \00" +@.str3464 = private unnamed_addr constant [6 x i8] c"mbody\00" +@.str3465 = private unnamed_addr constant [5 x i8] c"marm\00" +@.str3466 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3467 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3468 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3469 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3470 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3471 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3472 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3473 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3474 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3475 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3476 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3477 = private unnamed_addr constant [21 x i8] c"emit: unknown event \00" +@.str3478 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3479 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3480 = private unnamed_addr constant [5 x i8] c"null\00" +@.str3481 = private unnamed_addr constant [3 x i8] c" \00" +@.str3482 = private unnamed_addr constant [53 x i8] c" = getelementptr inbounds i8, ptr @L_sendbuf, i32 0\0A\00" +@.str3483 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3484 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3485 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3486 = private unnamed_addr constant [3 x i8] c" \00" +@.str3487 = private unnamed_addr constant [51 x i8] c" = getelementptr inbounds i8, ptr @L_sendbuf, i32 \00" +@.str3488 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3489 = private unnamed_addr constant [9 x i8] c" store \00" +@.str3490 = private unnamed_addr constant [2 x i8] c" \00" +@.str3491 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3492 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3493 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3494 = private unnamed_addr constant [10 x i8] c"toclients\00" +@.str3495 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str3496 = private unnamed_addr constant [9 x i8] c"net_send\00" +@.str3497 = private unnamed_addr constant [14 x i8] c" call void @\00" +@.str3498 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3499 = private unnamed_addr constant [23 x i8] c", ptr @L_sendbuf, i32 \00" +@.str3500 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3501 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3502 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3503 = private unnamed_addr constant [3 x i8] c", \00" +@.str3504 = private unnamed_addr constant [2 x i8] c" \00" +@.str3505 = private unnamed_addr constant [3 x i8] c" \00" +@.str3506 = private unnamed_addr constant [17 x i8] c" = call i32 @ev_\00" +@.str3507 = private unnamed_addr constant [2 x i8] c"(\00" +@.str3508 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3509 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3510 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3511 = private unnamed_addr constant [2 x i8] c"(\00" +@.str3512 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3513 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3514 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3515 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3516 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3517 = private unnamed_addr constant [5 x i8] c"null\00" +@.str3518 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3519 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3520 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3521 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3522 = private unnamed_addr constant [44 x i8] c"cancel outside a cancellable event listener\00" +@.str3523 = private unnamed_addr constant [20 x i8] c" store i32 1, ptr \00" +@.str3524 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3525 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" +@.str3526 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" +@.str3527 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" +@.str3528 = private unnamed_addr constant [34 x i8] c"@L_frame = internal global i32 0\0A\00" +@.str3529 = private unnamed_addr constant [34 x i8] c"@L_scene = internal global i32 0\0A\00" +@.str3530 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" +@.str3531 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" +@.str3532 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str3533 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" +@.str3534 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str3535 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" +@.str3536 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str3537 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" +@.str3538 = private unnamed_addr constant [33 x i8] c"@L_role = internal global i32 1\0A\00" +@.str3539 = private unnamed_addr constant [36 x i8] c"@L_localid = internal global i32 0\0A\00" +@.str3540 = private unnamed_addr constant [33 x i8] c"@L_owner_arr = internal global [\00" +@.str3541 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str3542 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str3543 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str3544 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3545 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" +@.str3546 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str3547 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str3548 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" +@.str3549 = private unnamed_addr constant [5 x i8] c"@ME_\00" +@.str3550 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" +@.str3551 = private unnamed_addr constant [5 x i8] c"@HE_\00" +@.str3552 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" +@.str3553 = private unnamed_addr constant [5 x i8] c"@LE_\00" +@.str3554 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" +@.str3555 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" +@.str3556 = private unnamed_addr constant [3 x i8] c"%h\00" +@.str3557 = private unnamed_addr constant [3 x i8] c" \00" +@.str3558 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3559 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3560 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str3561 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" +@.str3562 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3563 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" +@.str3564 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" +@.str3565 = private unnamed_addr constant [23 x i8] c" store i32 0, ptr %k\0A\00" +@.str3566 = private unnamed_addr constant [33 x i8] c" %ow = getelementptr inbounds [\00" +@.str3567 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A\00" +@.str3568 = private unnamed_addr constant [25 x i8] c" store i32 -1, ptr %ow\0A\00" +@.str3569 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str3570 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" +@.str3571 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str3572 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" +@.str3573 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" +@.str3574 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" +@.str3575 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" +@.str3576 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str3577 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str3578 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" +@.str3579 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" +@.str3580 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str3581 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" +@.str3582 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" +@.str3583 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" +@.str3584 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" +@.str3585 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str3586 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str3587 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" +@.str3588 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str3589 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str3590 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str3591 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" +@.str3592 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" +@.str3593 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" +@.str3594 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str3595 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str3596 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" +@.str3597 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str3598 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str3599 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str3600 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" +@.str3601 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" +@.str3602 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" +@.str3603 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str3604 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str3605 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3606 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3607 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3608 = private unnamed_addr constant [6 x i8] c"qcond\00" +@.str3609 = private unnamed_addr constant [6 x i8] c"qbody\00" +@.str3610 = private unnamed_addr constant [6 x i8] c"qnext\00" +@.str3611 = private unnamed_addr constant [5 x i8] c"qend\00" +@.str3612 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3613 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3614 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3615 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3616 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" +@.str3617 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str3618 = private unnamed_addr constant [3 x i8] c", \00" +@.str3619 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3620 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3621 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3622 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3623 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3624 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3625 = private unnamed_addr constant [3 x i8] c" \00" +@.str3626 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3627 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" +@.str3628 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3629 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3630 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3631 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3632 = private unnamed_addr constant [3 x i8] c"qa\00" +@.str3633 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3634 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3635 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3636 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3637 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3638 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3639 = private unnamed_addr constant [3 x i8] c" \00" +@.str3640 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3641 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str3642 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3643 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3644 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3645 = private unnamed_addr constant [3 x i8] c", \00" +@.str3646 = private unnamed_addr constant [19 x i8] c"load i32, ptr @ME_\00" +@.str3647 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3648 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3649 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str3650 = private unnamed_addr constant [3 x i8] c", \00" +@.str3651 = private unnamed_addr constant [3 x i8] c" \00" +@.str3652 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3653 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3654 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3655 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3656 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str3657 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" +@.str3658 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3659 = private unnamed_addr constant [3 x i8] c"qt\00" +@.str3660 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3661 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3662 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3663 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3664 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3665 = private unnamed_addr constant [3 x i8] c" \00" +@.str3666 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3667 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3668 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str3669 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3670 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3671 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3672 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str3673 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3674 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3675 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3676 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3677 = private unnamed_addr constant [3 x i8] c"qw\00" +@.str3678 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3679 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3680 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3681 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3682 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3683 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3684 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3685 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3686 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3687 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str3688 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str3689 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3690 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3691 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3692 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3693 = private unnamed_addr constant [25 x i8] c"spawn: unknown property \00" +@.str3694 = private unnamed_addr constant [3 x i8] c" \00" +@.str3695 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3696 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3697 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3698 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3699 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" +@.str3700 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3701 = private unnamed_addr constant [3 x i8] c" \00" +@.str3702 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3703 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3704 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str3705 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3706 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3707 = private unnamed_addr constant [3 x i8] c" \00" +@.str3708 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str3709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3710 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3711 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3712 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3713 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3714 = private unnamed_addr constant [5 x i8] c"null\00" +@.str3715 = private unnamed_addr constant [9 x i8] c" store \00" +@.str3716 = private unnamed_addr constant [2 x i8] c" \00" +@.str3717 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3718 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3719 = private unnamed_addr constant [3 x i8] c" \00" +@.str3720 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str3721 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3722 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3723 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3724 = private unnamed_addr constant [9 x i8] c" store \00" +@.str3725 = private unnamed_addr constant [2 x i8] c" \00" +@.str3726 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3727 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3728 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3729 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str3730 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3731 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3732 = private unnamed_addr constant [6 x i8] c"prop_\00" +@.str3733 = private unnamed_addr constant [8 x i8] c"_attach\00" +@.str3734 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3735 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3736 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3737 = private unnamed_addr constant [3 x i8] c" \00" +@.str3738 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3739 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3740 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str3741 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3742 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3743 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3744 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str3745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3746 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3747 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" +@.str3748 = private unnamed_addr constant [3 x i8] c" \00" +@.str3749 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3750 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str3751 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3752 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3753 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3754 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3755 = private unnamed_addr constant [7 x i8] c"model_\00" +@.str3756 = private unnamed_addr constant [7 x i8] c"_spawn\00" +@.str3757 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3758 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3759 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3760 = private unnamed_addr constant [3 x i8] c" \00" +@.str3761 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3762 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str3763 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3764 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str3765 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3766 = private unnamed_addr constant [3 x i8] c", \00" +@.str3767 = private unnamed_addr constant [3 x i8] c"dh\00" +@.str3768 = private unnamed_addr constant [4 x i8] c"dhn\00" +@.str3769 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3770 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3771 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3772 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3773 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" +@.str3774 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3775 = private unnamed_addr constant [10 x i8] c", i32 0)\0A\00" +@.str3776 = private unnamed_addr constant [7 x i8] c"model_\00" +@.str3777 = private unnamed_addr constant [9 x i8] c"_despawn\00" +@.str3778 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3779 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3780 = private unnamed_addr constant [10 x i8] c", i32 0)\0A\00" +@.str3781 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3782 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3783 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3784 = private unnamed_addr constant [37 x i8] c" call void @ludic_sweep_entity(i32 \00" +@.str3785 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3786 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" +@.str3787 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3788 = private unnamed_addr constant [3 x i8] c" \00" +@.str3789 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3790 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3791 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3792 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3793 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str3794 = private unnamed_addr constant [12 x i8] c"icmp eq i8 \00" +@.str3795 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3796 = private unnamed_addr constant [7 x i8] c"attach\00" +@.str3797 = private unnamed_addr constant [8 x i8] c"attdone\00" +@.str3798 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3799 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3800 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3801 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3802 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3803 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3804 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3805 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3806 = private unnamed_addr constant [3 x i8] c" \00" +@.str3807 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3808 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3809 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3810 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3811 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str3812 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" +@.str3813 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3814 = private unnamed_addr constant [7 x i8] c"detach\00" +@.str3815 = private unnamed_addr constant [8 x i8] c"detdone\00" +@.str3816 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3817 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3818 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3819 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3820 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3821 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" +@.str3822 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3823 = private unnamed_addr constant [3 x i8] c" \00" +@.str3824 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3825 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3826 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str3827 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3828 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3830 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str3831 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3832 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3833 = private unnamed_addr constant [6 x i8] c"prop_\00" +@.str3834 = private unnamed_addr constant [8 x i8] c"_detach\00" +@.str3835 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3836 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3837 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3838 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3839 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3840 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3841 = private unnamed_addr constant [2 x i8] c"0\00" +@.str3842 = private unnamed_addr constant [2 x i8] c"1\00" +@.str3843 = private unnamed_addr constant [6 x i8] c"layer\00" +@.str3844 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3845 = private unnamed_addr constant [11 x i8] c", ptr @LE_\00" +@.str3846 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3847 = private unnamed_addr constant [7 x i8] c"layer_\00" +@.str3848 = private unnamed_addr constant [6 x i8] c"_hide\00" +@.str3849 = private unnamed_addr constant [7 x i8] c"layer_\00" +@.str3850 = private unnamed_addr constant [6 x i8] c"_show\00" +@.str3851 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3852 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str3853 = private unnamed_addr constant [3 x i8] c" \00" +@.str3854 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3855 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str3856 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3857 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3858 = private unnamed_addr constant [12 x i8] c" store i8 \00" +@.str3859 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3860 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3861 = private unnamed_addr constant [3 x i8] c" \00" +@.str3862 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str3863 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str3864 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str3865 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str3866 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3867 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str3868 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str3869 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3870 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3871 = private unnamed_addr constant [6 x i8] c"prop_\00" +@.str3872 = private unnamed_addr constant [9 x i8] c"_disable\00" +@.str3873 = private unnamed_addr constant [6 x i8] c"prop_\00" +@.str3874 = private unnamed_addr constant [8 x i8] c"_enable\00" +@.str3875 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3876 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str3877 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str3878 = private unnamed_addr constant [5 x i8] c"@HE_\00" +@.str3879 = private unnamed_addr constant [5 x i8] c"@ME_\00" +@.str3880 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str3881 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str3882 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3883 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3884 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str3885 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str3886 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" +@.str3887 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" +@.str3888 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str3889 = private unnamed_addr constant [19 x i8] c"load i32, ptr @HE_\00" +@.str3890 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3891 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3892 = private unnamed_addr constant [19 x i8] c"load i32, ptr @LE_\00" +@.str3893 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str3894 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str3895 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str3896 = private unnamed_addr constant [3 x i8] c", \00" +@.str3897 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_role\00" +@.str3898 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3899 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str3900 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str3901 = private unnamed_addr constant [3 x i8] c", \00" +@.str3902 = private unnamed_addr constant [5 x i8] c"hrun\00" +@.str3903 = private unnamed_addr constant [6 x i8] c"hskip\00" +@.str3904 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3905 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3906 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3907 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3908 = private unnamed_addr constant [20 x i8] c":\0A call void @sys_\00" +@.str3909 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str3910 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3911 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3912 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3913 = private unnamed_addr constant [23 x i8] c"load i32, ptr @L_scene\00" +@.str3914 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str3915 = private unnamed_addr constant [3 x i8] c", \00" +@.str3916 = private unnamed_addr constant [6 x i8] c"scrun\00" +@.str3917 = private unnamed_addr constant [7 x i8] c"scskip\00" +@.str3918 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str3919 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3920 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str3921 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3922 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3923 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str3924 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3925 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3926 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3927 = private unnamed_addr constant [7 x i8] c"scene_\00" +@.str3928 = private unnamed_addr constant [2 x i8] c"_\00" +@.str3929 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3930 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str3931 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str3932 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str3933 = private unnamed_addr constant [20 x i8] c"define void @scene_\00" +@.str3934 = private unnamed_addr constant [2 x i8] c"_\00" +@.str3935 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" +@.str3936 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str3937 = private unnamed_addr constant [6 x i8] c"enter\00" +@.str3938 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str3939 = private unnamed_addr constant [5 x i8] c"void\00" +@.str3940 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3941 = private unnamed_addr constant [26 x i8] c" store i32 %reason, ptr \00" +@.str3942 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3943 = private unnamed_addr constant [4 x i8] c"int\00" +@.str3944 = private unnamed_addr constant [3 x i8] c"%e\00" +@.str3945 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str3946 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str3947 = private unnamed_addr constant [25 x i8] c"define void @on_despawn_\00" +@.str3948 = private unnamed_addr constant [32 x i8] c"(i32 %e, i32 %reason) {\0Aentry:\0A\00" +@.str3949 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str3950 = private unnamed_addr constant [67 x i8] c"define void @L_despawn_all(i32 %reason) {\0Aentry:\0A br label %loop\0A\00" +@.str3951 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\0A\00" +@.str3952 = private unnamed_addr constant [58 x i8] c" %n = load i32, ptr @L_entc\0A %go = icmp slt i32 %i, %n\0A\00" +@.str3953 = private unnamed_addr constant [38 x i8] c" br i1 %go, label %body, label %fin\0A\00" +@.str3954 = private unnamed_addr constant [39 x i8] c"body:\0A %ap = getelementptr inbounds [\00" +@.str3955 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %i\0A\00" +@.str3956 = private unnamed_addr constant [55 x i8] c" %al = load i32, ptr %ap\0A %isa = icmp ne i32 %al, 0\0A\00" +@.str3957 = private unnamed_addr constant [38 x i8] c" br i1 %isa, label %do, label %cont\0A\00" +@.str3958 = private unnamed_addr constant [37 x i8] c"do:\0A %kp = getelementptr inbounds [\00" +@.str3959 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %i\0A\00" +@.str3960 = private unnamed_addr constant [26 x i8] c" %k = load i32, ptr %kp\0A\00" +@.str3961 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str3962 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" +@.str3963 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3964 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" +@.str3965 = private unnamed_addr constant [13 x i8] c", label %hit\00" +@.str3966 = private unnamed_addr constant [14 x i8] c", label %next\00" +@.str3967 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3968 = private unnamed_addr constant [4 x i8] c"hit\00" +@.str3969 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" +@.str3970 = private unnamed_addr constant [23 x i8] c"(i32 %i, i32 %reason)\0A\00" +@.str3971 = private unnamed_addr constant [7 x i8] c"model_\00" +@.str3972 = private unnamed_addr constant [9 x i8] c"_despawn\00" +@.str3973 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str3974 = private unnamed_addr constant [23 x i8] c"(i32 %i, i32 %reason)\0A\00" +@.str3975 = private unnamed_addr constant [17 x i8] c" br label %next\00" +@.str3976 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str3977 = private unnamed_addr constant [5 x i8] c"next\00" +@.str3978 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str3979 = private unnamed_addr constant [18 x i8] c" br label %cont\0A\00" +@.str3980 = private unnamed_addr constant [46 x i8] c"cont:\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" +@.str3981 = private unnamed_addr constant [20 x i8] c"fin:\0A ret void\0A}\0A\0A\00" +@.str3982 = private unnamed_addr constant [26 x i8] c"@ev_depth = global i32 0\0A\00" +@.str3983 = private unnamed_addr constant [5 x i8] c"%Ev_\00" +@.str3984 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str3985 = private unnamed_addr constant [3 x i8] c", \00" +@.str3986 = private unnamed_addr constant [3 x i8] c", \00" +@.str3987 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str3988 = private unnamed_addr constant [4 x i8] c" }\0A\00" +@.str3989 = private unnamed_addr constant [6 x i8] c"@evL_\00" +@.str3990 = private unnamed_addr constant [12 x i8] c" = global [\00" +@.str3991 = private unnamed_addr constant [25 x i8] c" x ptr] zeroinitializer\0A\00" +@.str3992 = private unnamed_addr constant [6 x i8] c"@evN_\00" +@.str3993 = private unnamed_addr constant [17 x i8] c" = global i32 0\0A\00" +@.str3994 = private unnamed_addr constant [6 x i8] c"@evO_\00" +@.str3995 = private unnamed_addr constant [12 x i8] c" = global [\00" +@.str3996 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str3997 = private unnamed_addr constant [22 x i8] c"define i32 @ludic_on_\00" +@.str3998 = private unnamed_addr constant [20 x i8] c"(ptr %cb) {\0Aentry:\0A\00" +@.str3999 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" +@.str4000 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4001 = private unnamed_addr constant [28 x i8] c" %full = icmp slt i32 %n, \00" +@.str4002 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4003 = private unnamed_addr constant [40 x i8] c" br i1 %full, label %add, label %drop\0A\00" +@.str4004 = private unnamed_addr constant [40 x i8] c"add:\0A %slot = getelementptr inbounds [\00" +@.str4005 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" +@.str4006 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" +@.str4007 = private unnamed_addr constant [28 x i8] c" store ptr %cb, ptr %slot\0A\00" +@.str4008 = private unnamed_addr constant [36 x i8] c" %oslot = getelementptr inbounds [\00" +@.str4009 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" +@.str4010 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" +@.str4011 = private unnamed_addr constant [28 x i8] c" store i32 -1, ptr %oslot\0A\00" +@.str4012 = private unnamed_addr constant [49 x i8] c" %n1 = add i32 %n, 1\0A store i32 %n1, ptr @evN_\00" +@.str4013 = private unnamed_addr constant [15 x i8] c"\0A ret i32 %n\0A\00" +@.str4014 = private unnamed_addr constant [23 x i8] c"drop:\0A ret i32 -1\0A}\0A\0A\00" +@.str4015 = private unnamed_addr constant [29 x i8] c"define i32 @ludic_on_entity_\00" +@.str4016 = private unnamed_addr constant [32 x i8] c"(i32 %owner, ptr %cb) {\0Aentry:\0A\00" +@.str4017 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" +@.str4018 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4019 = private unnamed_addr constant [28 x i8] c" %full = icmp slt i32 %n, \00" +@.str4020 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4021 = private unnamed_addr constant [40 x i8] c" br i1 %full, label %add, label %drop\0A\00" +@.str4022 = private unnamed_addr constant [40 x i8] c"add:\0A %slot = getelementptr inbounds [\00" +@.str4023 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" +@.str4024 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" +@.str4025 = private unnamed_addr constant [28 x i8] c" store ptr %cb, ptr %slot\0A\00" +@.str4026 = private unnamed_addr constant [36 x i8] c" %oslot = getelementptr inbounds [\00" +@.str4027 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" +@.str4028 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %n\0A\00" +@.str4029 = private unnamed_addr constant [32 x i8] c" store i32 %owner, ptr %oslot\0A\00" +@.str4030 = private unnamed_addr constant [49 x i8] c" %n1 = add i32 %n, 1\0A store i32 %n1, ptr @evN_\00" +@.str4031 = private unnamed_addr constant [15 x i8] c"\0A ret i32 %n\0A\00" +@.str4032 = private unnamed_addr constant [23 x i8] c"drop:\0A ret i32 -1\0A}\0A\0A\00" +@.str4033 = private unnamed_addr constant [24 x i8] c"define void @ludic_off_\00" +@.str4034 = private unnamed_addr constant [21 x i8] c"(i32 %tok) {\0Aentry:\0A\00" +@.str4035 = private unnamed_addr constant [27 x i8] c" %n = load i32, ptr @evN_\00" +@.str4036 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4037 = private unnamed_addr constant [84 x i8] c" %lo = icmp sge i32 %tok, 0\0A %hi = icmp slt i32 %tok, %n\0A %ok = and i1 %lo, %hi\0A\00" +@.str4038 = private unnamed_addr constant [37 x i8] c" br i1 %ok, label %do, label %skip\0A\00" +@.str4039 = private unnamed_addr constant [39 x i8] c"do:\0A %slot = getelementptr inbounds [\00" +@.str4040 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" +@.str4041 = private unnamed_addr constant [19 x i8] c", i32 0, i32 %tok\0A\00" +@.str4042 = private unnamed_addr constant [46 x i8] c" store ptr null, ptr %slot\0A br label %skip\0A\00" +@.str4043 = private unnamed_addr constant [21 x i8] c"skip:\0A ret void\0A}\0A\0A\00" +@.str4044 = private unnamed_addr constant [5 x i8] c"void\00" +@.str4045 = private unnamed_addr constant [34 x i8] c" %evd = load i32, ptr @ev_depth\0A\00" +@.str4046 = private unnamed_addr constant [32 x i8] c" %evover = icmp sge i32 %evd, \00" +@.str4047 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4048 = private unnamed_addr constant [44 x i8] c" br i1 %evover, label %evcap, label %evgo\0A\00" +@.str4049 = private unnamed_addr constant [8 x i8] c"evcap:\0A\00" +@.str4050 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str4051 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str4052 = private unnamed_addr constant [7 x i8] c"evgo:\0A\00" +@.str4053 = private unnamed_addr constant [60 x i8] c" %evd1 = add i32 %evd, 1\0A store i32 %evd1, ptr @ev_depth\0A\00" +@.str4054 = private unnamed_addr constant [5 x i8] c"%Ev_\00" +@.str4055 = private unnamed_addr constant [3 x i8] c" \00" +@.str4056 = private unnamed_addr constant [31 x i8] c" = getelementptr inbounds %Ev_\00" +@.str4057 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4058 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4059 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4060 = private unnamed_addr constant [9 x i8] c" store \00" +@.str4061 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str4062 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4063 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4064 = private unnamed_addr constant [9 x i8] c" store \00" +@.str4065 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str4066 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4067 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4068 = private unnamed_addr constant [3 x i8] c" \00" +@.str4069 = private unnamed_addr constant [31 x i8] c" = getelementptr inbounds %Ev_\00" +@.str4070 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4071 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4072 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4073 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str4074 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4075 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str4076 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str4077 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4078 = private unnamed_addr constant [4 x i8] c"evl\00" +@.str4079 = private unnamed_addr constant [4 x i8] c"evb\00" +@.str4080 = private unnamed_addr constant [4 x i8] c"evd\00" +@.str4081 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str4082 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4083 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4084 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str4085 = private unnamed_addr constant [20 x i8] c"load i32, ptr @evN_\00" +@.str4086 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str4087 = private unnamed_addr constant [3 x i8] c", \00" +@.str4088 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str4089 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4090 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4091 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4092 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4093 = private unnamed_addr constant [3 x i8] c" \00" +@.str4094 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4095 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" +@.str4096 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4097 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4098 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str4099 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str4100 = private unnamed_addr constant [7 x i8] c", null\00" +@.str4101 = private unnamed_addr constant [5 x i8] c"evdo\00" +@.str4102 = private unnamed_addr constant [5 x i8] c"evsk\00" +@.str4103 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str4104 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4105 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4106 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4107 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4108 = private unnamed_addr constant [13 x i8] c" call void \00" +@.str4109 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str4110 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4111 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str4112 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4113 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4114 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str4115 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str4116 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4117 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4118 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4119 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str4120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4121 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4122 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str4123 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str4124 = private unnamed_addr constant [97 x i8] c" %evdd = load i32, ptr @ev_depth\0A %evdd1 = sub i32 %evdd, 1\0A store i32 %evdd1, ptr @ev_depth\0A\00" +@.str4125 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str4126 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4127 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4128 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str4129 = private unnamed_addr constant [5 x i8] c"void\00" +@.str4130 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str4131 = private unnamed_addr constant [8 x i8] c"define \00" +@.str4132 = private unnamed_addr constant [6 x i8] c" @ev_\00" +@.str4133 = private unnamed_addr constant [2 x i8] c"(\00" +@.str4134 = private unnamed_addr constant [3 x i8] c", \00" +@.str4135 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str4136 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" +@.str4137 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str4138 = private unnamed_addr constant [112 x i8] c"define void @ludic_sweep_entity(i32 %owner) {\0Aentry:\0A %ci = alloca i32\0A store i32 0, ptr %ci\0A br label %sw0\0A\00" +@.str4139 = private unnamed_addr constant [3 x i8] c"sw\00" +@.str4140 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4141 = private unnamed_addr constant [7 x i8] c" %swi\00" +@.str4142 = private unnamed_addr constant [22 x i8] c" = load i32, ptr %ci\0A\00" +@.str4143 = private unnamed_addr constant [7 x i8] c" %swn\00" +@.str4144 = private unnamed_addr constant [23 x i8] c" = load i32, ptr @evN_\00" +@.str4145 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4146 = private unnamed_addr constant [7 x i8] c" %swg\00" +@.str4147 = private unnamed_addr constant [21 x i8] c" = icmp slt i32 %swi\00" +@.str4148 = private unnamed_addr constant [7 x i8] c", %swn\00" +@.str4149 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4150 = private unnamed_addr constant [13 x i8] c" br i1 %swg\00" +@.str4151 = private unnamed_addr constant [13 x i8] c", label %swb\00" +@.str4152 = private unnamed_addr constant [13 x i8] c", label %swd\00" +@.str4153 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4154 = private unnamed_addr constant [4 x i8] c"swb\00" +@.str4155 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4156 = private unnamed_addr constant [8 x i8] c" %swop\00" +@.str4157 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4158 = private unnamed_addr constant [19 x i8] c" x i32], ptr @evO_\00" +@.str4159 = private unnamed_addr constant [18 x i8] c", i32 0, i32 %swi\00" +@.str4160 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4161 = private unnamed_addr constant [8 x i8] c" %swov\00" +@.str4162 = private unnamed_addr constant [23 x i8] c" = load i32, ptr %swop\00" +@.str4163 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4164 = private unnamed_addr constant [7 x i8] c" %swm\00" +@.str4165 = private unnamed_addr constant [21 x i8] c" = icmp eq i32 %swov\00" +@.str4166 = private unnamed_addr constant [10 x i8] c", %owner\0A\00" +@.str4167 = private unnamed_addr constant [13 x i8] c" br i1 %swm\00" +@.str4168 = private unnamed_addr constant [13 x i8] c", label %swh\00" +@.str4169 = private unnamed_addr constant [13 x i8] c", label %swx\00" +@.str4170 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4171 = private unnamed_addr constant [4 x i8] c"swh\00" +@.str4172 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4173 = private unnamed_addr constant [8 x i8] c" %swlp\00" +@.str4174 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4175 = private unnamed_addr constant [19 x i8] c" x ptr], ptr @evL_\00" +@.str4176 = private unnamed_addr constant [18 x i8] c", i32 0, i32 %swi\00" +@.str4177 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4178 = private unnamed_addr constant [28 x i8] c" store ptr null, ptr %swlp\00" +@.str4179 = private unnamed_addr constant [17 x i8] c"\0A br label %swx\00" +@.str4180 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4181 = private unnamed_addr constant [4 x i8] c"swx\00" +@.str4182 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4183 = private unnamed_addr constant [8 x i8] c" %swi1\00" +@.str4184 = private unnamed_addr constant [16 x i8] c" = add i32 %swi\00" +@.str4185 = private unnamed_addr constant [22 x i8] c", 1\0A store i32 %swi1\00" +@.str4186 = private unnamed_addr constant [25 x i8] c", ptr %ci\0A br label %sw\00" +@.str4187 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4188 = private unnamed_addr constant [4 x i8] c"swd\00" +@.str4189 = private unnamed_addr constant [26 x i8] c":\0A store i32 0, ptr %ci\0A\00" +@.str4190 = private unnamed_addr constant [15 x i8] c" br label %sw\00" +@.str4191 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4192 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str4193 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str4194 = private unnamed_addr constant [31 x i8] c"declare i32 @strcmp(ptr, ptr)\0A\00" +@.str4195 = private unnamed_addr constant [27 x i8] c"@dyn_count = global i32 0\0A\00" +@.str4196 = private unnamed_addr constant [43 x i8] c"@dynS = global [32 x ptr] zeroinitializer\0A\00" +@.str4197 = private unnamed_addr constant [43 x i8] c"@dynH = global [32 x ptr] zeroinitializer\0A\00" +@.str4198 = private unnamed_addr constant [43 x i8] c"@dynF = global [32 x i32] zeroinitializer\0A\00" +@.str4199 = private unnamed_addr constant [46 x i8] c"@dynName = global [32 x ptr] zeroinitializer\0A\00" +@.str4200 = private unnamed_addr constant [47 x i8] c"define i32 @ludic_prop_id(ptr %name) {\0Aentry:\0A\00" +@.str4201 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str4202 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" +@.str4203 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4204 = private unnamed_addr constant [5 x i8] c" %e\00" +@.str4205 = private unnamed_addr constant [18 x i8] c" = icmp eq i32 %c\00" +@.str4206 = private unnamed_addr constant [5 x i8] c", 0\0A\00" +@.str4207 = private unnamed_addr constant [11 x i8] c" br i1 %e\00" +@.str4208 = private unnamed_addr constant [11 x i8] c", label %h\00" +@.str4209 = private unnamed_addr constant [11 x i8] c", label %n\00" +@.str4210 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4211 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4212 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" +@.str4213 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4214 = private unnamed_addr constant [2 x i8] c"n\00" +@.str4215 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4216 = private unnamed_addr constant [61 x i8] c" %dpi = alloca i32\0A store i32 0, ptr %dpi\0A br label %dpl\0A\00" +@.str4217 = private unnamed_addr constant [135 x i8] c"dpl:\0A %di = load i32, ptr %dpi\0A %dn = load i32, ptr @dyn_count\0A %dg = icmp slt i32 %di, %dn\0A br i1 %dg, label %dpb, label %dpnone\0A\00" +@.str4218 = private unnamed_addr constant [231 x i8] c"dpb:\0A %dnp = getelementptr inbounds [32 x ptr], ptr @dynName, i32 0, i32 %di\0A %dname = load ptr, ptr %dnp\0A %dcmp = call i32 @strcmp(ptr %name, ptr %dname)\0A %deq = icmp eq i32 %dcmp, 0\0A br i1 %deq, label %dphit, label %dpnext\0A\00" +@.str4219 = private unnamed_addr constant [31 x i8] c"dphit:\0A %drid = add i32 %di, \00" +@.str4220 = private unnamed_addr constant [18 x i8] c"\0A ret i32 %drid\0A\00" +@.str4221 = private unnamed_addr constant [76 x i8] c"dpnext:\0A %di1 = add i32 %di, 1\0A store i32 %di1, ptr %dpi\0A br label %dpl\0A\00" +@.str4222 = private unnamed_addr constant [25 x i8] c"dpnone:\0A ret i32 -1\0A}\0A\0A\00" +@.str4223 = private unnamed_addr constant [56 x i8] c"define i32 @ludic_field_id(i32 %p, ptr %name) {\0Aentry:\0A\00" +@.str4224 = private unnamed_addr constant [6 x i8] c" %pm\00" +@.str4225 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" +@.str4226 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4227 = private unnamed_addr constant [12 x i8] c" br i1 %pm\00" +@.str4228 = private unnamed_addr constant [12 x i8] c", label %pk\00" +@.str4229 = private unnamed_addr constant [12 x i8] c", label %pn\00" +@.str4230 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4231 = private unnamed_addr constant [3 x i8] c"pk\00" +@.str4232 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4233 = private unnamed_addr constant [2 x i8] c"_\00" +@.str4234 = private unnamed_addr constant [6 x i8] c" %fc\00" +@.str4235 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" +@.str4236 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4237 = private unnamed_addr constant [6 x i8] c" %fe\00" +@.str4238 = private unnamed_addr constant [19 x i8] c" = icmp eq i32 %fc\00" +@.str4239 = private unnamed_addr constant [5 x i8] c", 0\0A\00" +@.str4240 = private unnamed_addr constant [12 x i8] c" br i1 %fe\00" +@.str4241 = private unnamed_addr constant [12 x i8] c", label %fh\00" +@.str4242 = private unnamed_addr constant [12 x i8] c", label %fn\00" +@.str4243 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4244 = private unnamed_addr constant [3 x i8] c"fh\00" +@.str4245 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" +@.str4246 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4247 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str4248 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4249 = private unnamed_addr constant [14 x i8] c" ret i32 -1\0A\00" +@.str4250 = private unnamed_addr constant [3 x i8] c"pn\00" +@.str4251 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4252 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" +@.str4253 = private unnamed_addr constant [56 x i8] c"define i64 @ludic_get(i32 %e, i32 %p, i32 %f) {\0Aentry:\0A\00" +@.str4254 = private unnamed_addr constant [5 x i8] c" %m\00" +@.str4255 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" +@.str4256 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4257 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" +@.str4258 = private unnamed_addr constant [11 x i8] c", label %g\00" +@.str4259 = private unnamed_addr constant [12 x i8] c", label %gn\00" +@.str4260 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4261 = private unnamed_addr constant [2 x i8] c"g\00" +@.str4262 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4263 = private unnamed_addr constant [5 x i8] c" %s\00" +@.str4264 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4265 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str4266 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str4267 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str4268 = private unnamed_addr constant [2 x i8] c"_\00" +@.str4269 = private unnamed_addr constant [6 x i8] c" %gm\00" +@.str4270 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %f, \00" +@.str4271 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4272 = private unnamed_addr constant [12 x i8] c" br i1 %gm\00" +@.str4273 = private unnamed_addr constant [12 x i8] c", label %gf\00" +@.str4274 = private unnamed_addr constant [12 x i8] c", label %gk\00" +@.str4275 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4276 = private unnamed_addr constant [3 x i8] c"gf\00" +@.str4277 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4278 = private unnamed_addr constant [6 x i8] c" %ga\00" +@.str4279 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str4280 = private unnamed_addr constant [9 x i8] c", ptr %s\00" +@.str4281 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4282 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str4284 = private unnamed_addr constant [6 x i8] c" %gl\00" +@.str4285 = private unnamed_addr constant [21 x i8] c" = load ptr, ptr %ga\00" +@.str4286 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4287 = private unnamed_addr constant [6 x i8] c" %gr\00" +@.str4288 = private unnamed_addr constant [20 x i8] c" = ptrtoint ptr %gl\00" +@.str4289 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" +@.str4290 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4291 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str4292 = private unnamed_addr constant [6 x i8] c" %gl\00" +@.str4293 = private unnamed_addr constant [20 x i8] c" = load i8, ptr %ga\00" +@.str4294 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4295 = private unnamed_addr constant [6 x i8] c" %gr\00" +@.str4296 = private unnamed_addr constant [15 x i8] c" = zext i8 %gl\00" +@.str4297 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" +@.str4298 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4299 = private unnamed_addr constant [6 x i8] c" %gl\00" +@.str4300 = private unnamed_addr constant [21 x i8] c" = load i32, ptr %ga\00" +@.str4301 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4302 = private unnamed_addr constant [6 x i8] c" %gr\00" +@.str4303 = private unnamed_addr constant [16 x i8] c" = sext i32 %gl\00" +@.str4304 = private unnamed_addr constant [22 x i8] c" to i64\0A ret i64 %gr\00" +@.str4305 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4306 = private unnamed_addr constant [3 x i8] c"gk\00" +@.str4307 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4308 = private unnamed_addr constant [13 x i8] c" ret i64 0\0A\00" +@.str4309 = private unnamed_addr constant [3 x i8] c"gn\00" +@.str4310 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4311 = private unnamed_addr constant [23 x i8] c" %gdyn = sub i32 %p, \00" +@.str4312 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4313 = private unnamed_addr constant [175 x i8] c" %gdlo = icmp sge i32 %gdyn, 0\0A %gdc = load i32, ptr @dyn_count\0A %gdhi = icmp slt i32 %gdyn, %gdc\0A %gdok = and i1 %gdlo, %gdhi\0A br i1 %gdok, label %gdyng, label %gdnone\0A\00" +@.str4314 = private unnamed_addr constant [110 x i8] c"gdyng:\0A %gsp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %gdyn\0A %gbase = load ptr, ptr %gsp\0A\00" +@.str4315 = private unnamed_addr constant [156 x i8] c" %gfp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %gdyn\0A %gnf = load i32, ptr %gfp\0A %grow = mul i32 %e, %gnf\0A %gidx = add i32 %grow, %f\0A\00" +@.str4316 = private unnamed_addr constant [133 x i8] c" %gaddr = getelementptr inbounds i32, ptr %gbase, i32 %gidx\0A %gv = load i32, ptr %gaddr\0A %gr = sext i32 %gv to i64\0A ret i64 %gr\0A\00" +@.str4317 = private unnamed_addr constant [24 x i8] c"gdnone:\0A ret i64 0\0A}\0A\0A\00" +@.str4318 = private unnamed_addr constant [67 x i8] c"define void @ludic_set(i32 %e, i32 %p, i32 %f, i64 %val) {\0Aentry:\0A\00" +@.str4319 = private unnamed_addr constant [5 x i8] c" %m\00" +@.str4320 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" +@.str4321 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4322 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" +@.str4323 = private unnamed_addr constant [11 x i8] c", label %g\00" +@.str4324 = private unnamed_addr constant [12 x i8] c", label %gn\00" +@.str4325 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4326 = private unnamed_addr constant [2 x i8] c"g\00" +@.str4327 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4328 = private unnamed_addr constant [5 x i8] c" %s\00" +@.str4329 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4330 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str4331 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str4332 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str4333 = private unnamed_addr constant [2 x i8] c"_\00" +@.str4334 = private unnamed_addr constant [6 x i8] c" %sm\00" +@.str4335 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %f, \00" +@.str4336 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4337 = private unnamed_addr constant [12 x i8] c" br i1 %sm\00" +@.str4338 = private unnamed_addr constant [12 x i8] c", label %sf\00" +@.str4339 = private unnamed_addr constant [12 x i8] c", label %sk\00" +@.str4340 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4341 = private unnamed_addr constant [3 x i8] c"sf\00" +@.str4342 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4343 = private unnamed_addr constant [6 x i8] c" %sa\00" +@.str4344 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str4345 = private unnamed_addr constant [9 x i8] c", ptr %s\00" +@.str4346 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4347 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4348 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str4349 = private unnamed_addr constant [6 x i8] c" %sp\00" +@.str4350 = private unnamed_addr constant [29 x i8] c" = inttoptr i64 %val to ptr\0A\00" +@.str4351 = private unnamed_addr constant [16 x i8] c" store ptr %sp\00" +@.str4352 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" +@.str4353 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" +@.str4354 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str4355 = private unnamed_addr constant [6 x i8] c" %sb\00" +@.str4356 = private unnamed_addr constant [25 x i8] c" = trunc i64 %val to i8\0A\00" +@.str4357 = private unnamed_addr constant [15 x i8] c" store i8 %sb\00" +@.str4358 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" +@.str4359 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" +@.str4360 = private unnamed_addr constant [6 x i8] c" %sw\00" +@.str4361 = private unnamed_addr constant [26 x i8] c" = trunc i64 %val to i32\0A\00" +@.str4362 = private unnamed_addr constant [16 x i8] c" store i32 %sw\00" +@.str4363 = private unnamed_addr constant [10 x i8] c", ptr %sa\00" +@.str4364 = private unnamed_addr constant [13 x i8] c"\0A ret void\0A\00" +@.str4365 = private unnamed_addr constant [3 x i8] c"sk\00" +@.str4366 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4367 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str4368 = private unnamed_addr constant [3 x i8] c"gn\00" +@.str4369 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4370 = private unnamed_addr constant [23 x i8] c" %sdyn = sub i32 %p, \00" +@.str4371 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4372 = private unnamed_addr constant [175 x i8] c" %sdlo = icmp sge i32 %sdyn, 0\0A %sdc = load i32, ptr @dyn_count\0A %sdhi = icmp slt i32 %sdyn, %sdc\0A %sdok = and i1 %sdlo, %sdhi\0A br i1 %sdok, label %sdyng, label %sdnone\0A\00" +@.str4373 = private unnamed_addr constant [110 x i8] c"sdyng:\0A %ssp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %sdyn\0A %sbase = load ptr, ptr %ssp\0A\00" +@.str4374 = private unnamed_addr constant [156 x i8] c" %sfp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %sdyn\0A %snf = load i32, ptr %sfp\0A %srow = mul i32 %e, %snf\0A %sidx = add i32 %srow, %f\0A\00" +@.str4375 = private unnamed_addr constant [131 x i8] c" %saddr = getelementptr inbounds i32, ptr %sbase, i32 %sidx\0A %sv = trunc i64 %val to i32\0A store i32 %sv, ptr %saddr\0A ret void\0A\00" +@.str4376 = private unnamed_addr constant [23 x i8] c"sdnone:\0A ret void\0A}\0A\0A\00" +@.str4377 = private unnamed_addr constant [48 x i8] c"define i32 @ludic_has(i32 %e, i32 %p) {\0Aentry:\0A\00" +@.str4378 = private unnamed_addr constant [5 x i8] c" %m\00" +@.str4379 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %p, \00" +@.str4380 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4381 = private unnamed_addr constant [11 x i8] c" br i1 %m\00" +@.str4382 = private unnamed_addr constant [11 x i8] c", label %g\00" +@.str4383 = private unnamed_addr constant [12 x i8] c", label %gn\00" +@.str4384 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4385 = private unnamed_addr constant [2 x i8] c"g\00" +@.str4386 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4387 = private unnamed_addr constant [6 x i8] c" %hp\00" +@.str4388 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4389 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str4390 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str4391 = private unnamed_addr constant [6 x i8] c" %hv\00" +@.str4392 = private unnamed_addr constant [20 x i8] c" = load i8, ptr %hp\00" +@.str4393 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4394 = private unnamed_addr constant [6 x i8] c" %hr\00" +@.str4395 = private unnamed_addr constant [15 x i8] c" = zext i8 %hv\00" +@.str4396 = private unnamed_addr constant [22 x i8] c" to i32\0A ret i32 %hr\00" +@.str4397 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4398 = private unnamed_addr constant [3 x i8] c"gn\00" +@.str4399 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4400 = private unnamed_addr constant [23 x i8] c" %hdyn = sub i32 %p, \00" +@.str4401 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4402 = private unnamed_addr constant [175 x i8] c" %hdlo = icmp sge i32 %hdyn, 0\0A %hdc = load i32, ptr @dyn_count\0A %hdhi = icmp slt i32 %hdyn, %hdc\0A %hdok = and i1 %hdlo, %hdhi\0A br i1 %hdok, label %hdyng, label %hdnone\0A\00" +@.str4403 = private unnamed_addr constant [238 x i8] c"hdyng:\0A %hhp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %hdyn\0A %hh = load ptr, ptr %hhp\0A %hslot = getelementptr inbounds i8, ptr %hh, i32 %e\0A %hval = load i8, ptr %hslot\0A %hres = zext i8 %hval to i32\0A ret i32 %hres\0A\00" +@.str4404 = private unnamed_addr constant [24 x i8] c"hdnone:\0A ret i32 0\0A}\0A\0A\00" +@.str4405 = private unnamed_addr constant [67 x i8] c"define i32 @ludic_register_prop(ptr %name, i32 %nfields) {\0Aentry:\0A\00" +@.str4406 = private unnamed_addr constant [102 x i8] c" %dc = load i32, ptr @dyn_count\0A %full = icmp slt i32 %dc, 32\0A br i1 %full, label %do, label %rej\0A\00" +@.str4407 = private unnamed_addr constant [56 x i8] c"do:\0A %nf4 = mul i32 %nfields, 4\0A %sz = mul i32 %nf4, \00" +@.str4408 = private unnamed_addr constant [31 x i8] c"\0A %szl = sext i32 %sz to i64\0A\00" +@.str4409 = private unnamed_addr constant [83 x i8] c" %buf = call ptr @malloc(i64 %szl)\0A call ptr @memset(ptr %buf, i32 0, i64 %szl)\0A\00" +@.str4410 = private unnamed_addr constant [96 x i8] c" %sp = getelementptr inbounds [32 x ptr], ptr @dynS, i32 0, i32 %dc\0A store ptr %buf, ptr %sp\0A\00" +@.str4411 = private unnamed_addr constant [32 x i8] c" %hbuf = call ptr @malloc(i64 \00" +@.str4412 = private unnamed_addr constant [44 x i8] c")\0A call ptr @memset(ptr %hbuf, i32 0, i64 \00" +@.str4413 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4414 = private unnamed_addr constant [97 x i8] c" %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dc\0A store ptr %hbuf, ptr %hp\0A\00" +@.str4415 = private unnamed_addr constant [100 x i8] c" %fp = getelementptr inbounds [32 x i32], ptr @dynF, i32 0, i32 %dc\0A store i32 %nfields, ptr %fp\0A\00" +@.str4416 = private unnamed_addr constant [100 x i8] c" %np = getelementptr inbounds [32 x ptr], ptr @dynName, i32 0, i32 %dc\0A store ptr %name, ptr %np\0A\00" +@.str4417 = private unnamed_addr constant [22 x i8] c" %id = add i32 %dc, \00" +@.str4418 = private unnamed_addr constant [73 x i8] c"\0A %dc1 = add i32 %dc, 1\0A store i32 %dc1, ptr @dyn_count\0A ret i32 %id\0A\00" +@.str4419 = private unnamed_addr constant [22 x i8] c"rej:\0A ret i32 -1\0A}\0A\0A\00" +@.str4420 = private unnamed_addr constant [56 x i8] c"define void @ludic_attach_dyn(i32 %e, i32 %p) {\0Aentry:\0A\00" +@.str4421 = private unnamed_addr constant [22 x i8] c" %dyn = sub i32 %p, \00" +@.str4422 = private unnamed_addr constant [187 x i8] c"\0A %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dyn\0A %h = load ptr, ptr %hp\0A %slot = getelementptr inbounds i8, ptr %h, i32 %e\0A store i8 1, ptr %slot\0A ret void\0A}\0A\0A\00" +@.str4423 = private unnamed_addr constant [56 x i8] c"define void @ludic_detach_dyn(i32 %e, i32 %p) {\0Aentry:\0A\00" +@.str4424 = private unnamed_addr constant [22 x i8] c" %dyn = sub i32 %p, \00" +@.str4425 = private unnamed_addr constant [187 x i8] c"\0A %hp = getelementptr inbounds [32 x ptr], ptr @dynH, i32 0, i32 %dyn\0A %h = load ptr, ptr %hp\0A %slot = getelementptr inbounds i8, ptr %h, i32 %e\0A store i8 0, ptr %slot\0A ret void\0A}\0A\0A\00" +@.str4426 = private unnamed_addr constant [88 x i8] c"define i32 @ludic_entity_count() {\0Aentry:\0A %n = load i32, ptr @L_entc\0A ret i32 %n\0A}\0A\0A\00" +@.str4427 = private unnamed_addr constant [41 x i8] c"define i32 @ludic_kind(i32 %e) {\0Aentry:\0A\00" +@.str4428 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" +@.str4429 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" +@.str4430 = private unnamed_addr constant [42 x i8] c" %k = load i32, ptr %kp\0A ret i32 %k\0A}\0A\0A\00" +@.str4431 = private unnamed_addr constant [48 x i8] c"define i32 @ludic_model_id(ptr %name) {\0Aentry:\0A\00" +@.str4432 = private unnamed_addr constant [7 x i8] c" %mdc\00" +@.str4433 = private unnamed_addr constant [36 x i8] c" = call i32 @strcmp(ptr %name, ptr \00" +@.str4434 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4435 = private unnamed_addr constant [7 x i8] c" %mde\00" +@.str4436 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %mdc\00" +@.str4437 = private unnamed_addr constant [5 x i8] c", 0\0A\00" +@.str4438 = private unnamed_addr constant [13 x i8] c" br i1 %mde\00" +@.str4439 = private unnamed_addr constant [13 x i8] c", label %mdh\00" +@.str4440 = private unnamed_addr constant [13 x i8] c", label %mdn\00" +@.str4441 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4442 = private unnamed_addr constant [4 x i8] c"mdh\00" +@.str4443 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" +@.str4444 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4445 = private unnamed_addr constant [4 x i8] c"mdn\00" +@.str4446 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4447 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" +@.str4448 = private unnamed_addr constant [4 x i8] c"int\00" +@.str4449 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4450 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4451 = private unnamed_addr constant [25 x i8] c"define i32 @ludic_spawn_\00" +@.str4452 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" +@.str4453 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str4454 = private unnamed_addr constant [42 x i8] c"define i32 @ludic_spawn(i32 %m) {\0Aentry:\0A\00" +@.str4455 = private unnamed_addr constant [6 x i8] c" %sm\00" +@.str4456 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %m, \00" +@.str4457 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4458 = private unnamed_addr constant [12 x i8] c" br i1 %sm\00" +@.str4459 = private unnamed_addr constant [12 x i8] c", label %sh\00" +@.str4460 = private unnamed_addr constant [12 x i8] c", label %sn\00" +@.str4461 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4462 = private unnamed_addr constant [3 x i8] c"sh\00" +@.str4463 = private unnamed_addr constant [8 x i8] c":\0A %sr\00" +@.str4464 = private unnamed_addr constant [26 x i8] c" = call i32 @ludic_spawn_\00" +@.str4465 = private unnamed_addr constant [17 x i8] c"()\0A ret i32 %sr\00" +@.str4466 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4467 = private unnamed_addr constant [3 x i8] c"sn\00" +@.str4468 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4469 = private unnamed_addr constant [17 x i8] c" ret i32 -1\0A}\0A\0A\00" +@.str4470 = private unnamed_addr constant [58 x i8] c"define i32 @ludic_query_next(i32 %p, i32 %from) {\0Aentry:\0A\00" +@.str4471 = private unnamed_addr constant [47 x i8] c" %n = load i32, ptr @L_entc\0A br label %loop\0A\00" +@.str4472 = private unnamed_addr constant [56 x i8] c"loop:\0A %e = phi i32 [ %from, %entry ], [ %e1, %cont ]\0A\00" +@.str4473 = private unnamed_addr constant [67 x i8] c" %go = icmp slt i32 %e, %n\0A br i1 %go, label %body, label %none\0A\00" +@.str4474 = private unnamed_addr constant [39 x i8] c"body:\0A %ap = getelementptr inbounds [\00" +@.str4475 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str4476 = private unnamed_addr constant [93 x i8] c" %al = load i32, ptr %ap\0A %isa = icmp ne i32 %al, 0\0A br i1 %isa, label %chk, label %cont\0A\00" +@.str4477 = private unnamed_addr constant [115 x i8] c"chk:\0A %h = call i32 @ludic_has(i32 %e, i32 %p)\0A %hit = icmp ne i32 %h, 0\0A br i1 %hit, label %hitb, label %cont\0A\00" +@.str4478 = private unnamed_addr constant [20 x i8] c"hitb:\0A ret i32 %e\0A\00" +@.str4479 = private unnamed_addr constant [46 x i8] c"cont:\0A %e1 = add i32 %e, 1\0A br label %loop\0A\00" +@.str4480 = private unnamed_addr constant [23 x i8] c"none:\0A ret i32 -1\0A}\0A\0A\00" +@.str4481 = private unnamed_addr constant [38 x i8] c"define void @L_tick_fixed() {\0Aentry:\0A\00" +@.str4482 = private unnamed_addr constant [6 x i8] c"Input\00" +@.str4483 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" +@.str4484 = private unnamed_addr constant [7 x i8] c"Update\00" +@.str4485 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" +@.str4486 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4487 = private unnamed_addr constant [39 x i8] c"define void @L_tick_render() {\0Aentry:\0A\00" +@.str4488 = private unnamed_addr constant [7 x i8] c"Render\00" +@.str4489 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4490 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str4491 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str4492 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str4493 = private unnamed_addr constant [8 x i8] c"rt_init\00" +@.str4494 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" +@.str4495 = private unnamed_addr constant [6 x i8] c"Start\00" +@.str4496 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4497 = private unnamed_addr constant [16 x i8] c", ptr @L_scene\0A\00" +@.str4498 = private unnamed_addr constant [26 x i8] c" call void @scene_enter_\00" +@.str4499 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str4500 = private unnamed_addr constant [14 x i8] c"program_start\00" +@.str4501 = private unnamed_addr constant [33 x i8] c" call void @ev_program_start()\0A\00" +@.str4502 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str4503 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" +@.str4504 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" +@.str4505 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str4506 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str4507 = private unnamed_addr constant [11 x i8] c"rt_running\00" +@.str4508 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" +@.str4509 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str4510 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str4511 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str4512 = private unnamed_addr constant [3 x i8] c", \00" +@.str4513 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str4514 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str4515 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str4516 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str4517 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str4518 = private unnamed_addr constant [8 x i8] c"rt_poll\00" +@.str4519 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" +@.str4520 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4521 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" +@.str4522 = private unnamed_addr constant [6 x i8] c"Input\00" +@.str4523 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" +@.str4524 = private unnamed_addr constant [7 x i8] c"Update\00" +@.str4525 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" +@.str4526 = private unnamed_addr constant [7 x i8] c"Render\00" +@.str4527 = private unnamed_addr constant [23 x i8] c"load i32, ptr @L_frame\00" +@.str4528 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str4529 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str4530 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4531 = private unnamed_addr constant [16 x i8] c", ptr @L_frame\0A\00" +@.str4532 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str4533 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str4534 = private unnamed_addr constant [35 x i8] c" call void @L_despawn_all(i32 2)\0A\00" +@.str4535 = private unnamed_addr constant [7 x i8] c"OnQuit\00" +@.str4536 = private unnamed_addr constant [13 x i8] c"program_quit\00" +@.str4537 = private unnamed_addr constant [32 x i8] c" call void @ev_program_quit()\0A\00" +@.str4538 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" +@.str4539 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" +@.str4540 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" +@.str4541 = private unnamed_addr constant [1 x i8] c"\00" +@.str4542 = private unnamed_addr constant [18 x i8] c"load i32, ptr @g_\00" +@.str4543 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" +@.str4544 = private unnamed_addr constant [2 x i8] c")\00" +@.str4545 = private unnamed_addr constant [6 x i8] c"smend\00" +@.str4546 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str4547 = private unnamed_addr constant [3 x i8] c", \00" +@.str4548 = private unnamed_addr constant [6 x i8] c"sbody\00" +@.str4549 = private unnamed_addr constant [5 x i8] c"sarm\00" +@.str4550 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str4551 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4552 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str4553 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4554 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4555 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str4556 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4557 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4558 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str4559 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4560 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4561 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4562 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" +@.str4563 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4564 = private unnamed_addr constant [32 x i8] c" call void @fn_rt_set_reg(i32 \00" +@.str4565 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str4566 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4567 = private unnamed_addr constant [27 x i8] c"become: no state or scene \00" +@.str4568 = private unnamed_addr constant [25 x i8] c" call void @scene_exit_\00" +@.str4569 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str4570 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str4571 = private unnamed_addr constant [16 x i8] c", ptr @L_scene\0A\00" +@.str4572 = private unnamed_addr constant [26 x i8] c" call void @scene_enter_\00" +@.str4573 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str4574 = private unnamed_addr constant [5 x i8] c"file\00" +@.str4575 = private unnamed_addr constant [4 x i8] c"%io\00" +@.str4576 = private unnamed_addr constant [3 x i8] c" \00" +@.str4577 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" +@.str4578 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str4579 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str4580 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" +@.str4581 = private unnamed_addr constant [5 x i8] c"size\00" +@.str4582 = private unnamed_addr constant [6 x i8] c"%ioff\00" +@.str4583 = private unnamed_addr constant [3 x i8] c" \00" +@.str4584 = private unnamed_addr constant [12 x i8] c" = add i64 \00" +@.str4585 = private unnamed_addr constant [3 x i8] c", \00" +@.str4586 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4587 = private unnamed_addr constant [5 x i8] c"%ioa\00" +@.str4588 = private unnamed_addr constant [3 x i8] c" \00" +@.str4589 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i64 \00" +@.str4590 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4591 = private unnamed_addr constant [5 x i8] c"save\00" +@.str4592 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str4593 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4594 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str4595 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4596 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str4597 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4598 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str4599 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4600 = private unnamed_addr constant [6 x i8] c"%ioff\00" +@.str4601 = private unnamed_addr constant [3 x i8] c" \00" +@.str4602 = private unnamed_addr constant [12 x i8] c" = add i64 \00" +@.str4603 = private unnamed_addr constant [3 x i8] c", \00" +@.str4604 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4605 = private unnamed_addr constant [2 x i8] c"0\00" +@.str4606 = private unnamed_addr constant [8 x i8] c"@L_entc\00" +@.str4607 = private unnamed_addr constant [2 x i8] c"4\00" +@.str4608 = private unnamed_addr constant [9 x i8] c"@L_freen\00" +@.str4609 = private unnamed_addr constant [2 x i8] c"4\00" +@.str4610 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" +@.str4611 = private unnamed_addr constant [5 x i8] c", 4\0A\00" +@.str4612 = private unnamed_addr constant [9 x i8] c"@L_alive\00" +@.str4613 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str4614 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" +@.str4615 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str4616 = private unnamed_addr constant [8 x i8] c"@L_kind\00" +@.str4617 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str4618 = private unnamed_addr constant [13 x i8] c"@L_owner_arr\00" +@.str4619 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str4620 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str4621 = private unnamed_addr constant [2 x i8] c"4\00" +@.str4622 = private unnamed_addr constant [5 x i8] c"%csz\00" +@.str4623 = private unnamed_addr constant [3 x i8] c" \00" +@.str4624 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" +@.str4625 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" +@.str4626 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" +@.str4627 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str4628 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str4629 = private unnamed_addr constant [5 x i8] c"file\00" +@.str4630 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" +@.str4631 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" +@.str4632 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" +@.str4633 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" +@.str4634 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" +@.str4635 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" +@.str4636 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" +@.str4637 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str4638 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" +@.str4639 = private unnamed_addr constant [7 x i8] c"fwrite\00" +@.str4640 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" +@.str4641 = 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" +@.str4642 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" +@.str4643 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" +@.str4644 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str4645 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" +@.str4646 = private unnamed_addr constant [6 x i8] c"fread\00" +@.str4647 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" +@.str4648 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" +@.str4649 = private unnamed_addr constant [45 x i8] c"define i32 @L_world_save(ptr %buf) {\0Aentry:\0A\00" +@.str4650 = private unnamed_addr constant [5 x i8] c"save\00" +@.str4651 = private unnamed_addr constant [1 x i8] c"\00" +@.str4652 = private unnamed_addr constant [5 x i8] c"%wsn\00" +@.str4653 = private unnamed_addr constant [3 x i8] c" \00" +@.str4654 = private unnamed_addr constant [14 x i8] c" = trunc i64 \00" +@.str4655 = private unnamed_addr constant [9 x i8] c" to i32\0A\00" +@.str4656 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4657 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" +@.str4658 = private unnamed_addr constant [56 x i8] c"define void @L_world_load(ptr %buf, i32 %len) {\0Aentry:\0A\00" +@.str4659 = private unnamed_addr constant [5 x i8] c"load\00" +@.str4660 = private unnamed_addr constant [1 x i8] c"\00" +@.str4661 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4662 = private unnamed_addr constant [37 x i8] c"define i32 @L_world_size() {\0Aentry:\0A\00" +@.str4663 = private unnamed_addr constant [5 x i8] c"size\00" +@.str4664 = private unnamed_addr constant [1 x i8] c"\00" +@.str4665 = private unnamed_addr constant [5 x i8] c"%wzn\00" +@.str4666 = private unnamed_addr constant [3 x i8] c" \00" +@.str4667 = private unnamed_addr constant [14 x i8] c" = trunc i64 \00" +@.str4668 = private unnamed_addr constant [9 x i8] c" to i32\0A\00" +@.str4669 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4670 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" +@.str4671 = private unnamed_addr constant [5 x i8] c"file\00" +@.str4672 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str4673 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str4674 = private unnamed_addr constant [2 x i8] c"1\00" +@.str4675 = private unnamed_addr constant [2 x i8] c"4\00" +@.str4676 = private unnamed_addr constant [24 x i8] c"ludicc(self): warning: \00" +@.str4677 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4678 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str4679 = private unnamed_addr constant [13 x i8] c"@Sync field \00" +@.str4680 = private unnamed_addr constant [2 x i8] c".\00" +@.str4681 = private unnamed_addr constant [68 x i8] c" is not a POD scalar (networked fields must be int/bool/fixed/byte)\00" +@.str4682 = private unnamed_addr constant [7 x i8] c"model \00" +@.str4683 = private unnamed_addr constant [9 x i8] c" @Syncs \00" +@.str4684 = private unnamed_addr constant [51 x i8] c" but it has no @Sync fields \E2\80\94 nothing replicates\00" +@.str4685 = private unnamed_addr constant [25 x i8] c"define i32 @L_serialize_\00" +@.str4686 = private unnamed_addr constant [29 x i8] c"(i32 %e, ptr %buf) {\0Aentry:\0A\00" +@.str4687 = private unnamed_addr constant [3 x i8] c" \00" +@.str4688 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4689 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str4690 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str4691 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str4692 = private unnamed_addr constant [3 x i8] c" \00" +@.str4693 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str4694 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4695 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4696 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4697 = private unnamed_addr constant [3 x i8] c" \00" +@.str4698 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i32 \00" +@.str4699 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4700 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str4701 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4702 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str4703 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4704 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4705 = private unnamed_addr constant [5 x i8] c"\0A}\0A\0A\00" +@.str4706 = private unnamed_addr constant [22 x i8] c"define void @L_apply_\00" +@.str4707 = private unnamed_addr constant [39 x i8] c"(i32 %e, ptr %buf, i32 %len) {\0Aentry:\0A\00" +@.str4708 = private unnamed_addr constant [3 x i8] c" \00" +@.str4709 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str4710 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str4711 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str4712 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str4713 = private unnamed_addr constant [3 x i8] c" \00" +@.str4714 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str4715 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4716 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str4717 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4718 = private unnamed_addr constant [3 x i8] c" \00" +@.str4719 = private unnamed_addr constant [45 x i8] c" = getelementptr inbounds i8, ptr %buf, i32 \00" +@.str4720 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4721 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str4722 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4723 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str4724 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4725 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4726 = private unnamed_addr constant [56 x i8] c"define i32 @ludic_serialize(i32 %e, ptr %buf) {\0Aentry:\0A\00" +@.str4727 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" +@.str4728 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" +@.str4729 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str4730 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" +@.str4731 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4732 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" +@.str4733 = private unnamed_addr constant [11 x i8] c", label %h\00" +@.str4734 = private unnamed_addr constant [11 x i8] c", label %n\00" +@.str4735 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4736 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4737 = private unnamed_addr constant [7 x i8] c":\0A %r\00" +@.str4738 = private unnamed_addr constant [26 x i8] c" = call i32 @L_serialize_\00" +@.str4739 = private unnamed_addr constant [32 x i8] c"(i32 %e, ptr %buf)\0A ret i32 %r\00" +@.str4740 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4741 = private unnamed_addr constant [2 x i8] c"n\00" +@.str4742 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4743 = private unnamed_addr constant [16 x i8] c" ret i32 0\0A}\0A\0A\00" +@.str4744 = private unnamed_addr constant [63 x i8] c"define void @ludic_apply(i32 %e, ptr %buf, i32 %len) {\0Aentry:\0A\00" +@.str4745 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" +@.str4746 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" +@.str4747 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str4748 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" +@.str4749 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4750 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" +@.str4751 = private unnamed_addr constant [11 x i8] c", label %h\00" +@.str4752 = private unnamed_addr constant [11 x i8] c", label %n\00" +@.str4753 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4754 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4755 = private unnamed_addr constant [24 x i8] c":\0A call void @L_apply_\00" +@.str4756 = private unnamed_addr constant [41 x i8] c"(i32 %e, ptr %buf, i32 %len)\0A ret void\0A\00" +@.str4757 = private unnamed_addr constant [2 x i8] c"n\00" +@.str4758 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4759 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4760 = private unnamed_addr constant [46 x i8] c"define i32 @ludic_sync_size(i32 %e) {\0Aentry:\0A\00" +@.str4761 = private unnamed_addr constant [33 x i8] c" %kp = getelementptr inbounds [\00" +@.str4762 = private unnamed_addr constant [62 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A %k = load i32, ptr %kp\0A\00" +@.str4763 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str4764 = private unnamed_addr constant [20 x i8] c" = icmp eq i32 %k, \00" +@.str4765 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4766 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" +@.str4767 = private unnamed_addr constant [11 x i8] c", label %h\00" +@.str4768 = private unnamed_addr constant [11 x i8] c", label %n\00" +@.str4769 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4770 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4771 = private unnamed_addr constant [13 x i8] c":\0A ret i32 \00" +@.str4772 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4773 = private unnamed_addr constant [2 x i8] c"n\00" +@.str4774 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4775 = private unnamed_addr constant [16 x i8] c" ret i32 0\0A}\0A\0A\00" +@.str4776 = private unnamed_addr constant [38 x i8] c"define i32 @L_owner(i32 %e) {\0Aentry:\0A\00" +@.str4777 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" +@.str4778 = private unnamed_addr constant [82 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A %v = load i32, ptr %p\0A ret i32 %v\0A}\0A\0A\00" +@.str4779 = private unnamed_addr constant [52 x i8] c"define void @L_set_owner(i32 %e, i32 %id) {\0Aentry:\0A\00" +@.str4780 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" +@.str4781 = private unnamed_addr constant [80 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A store i32 %id, ptr %p\0A ret void\0A}\0A\0A\00" +@.str4782 = private unnamed_addr constant [41 x i8] c"define i32 @L_is_owner(i32 %e) {\0Aentry:\0A\00" +@.str4783 = private unnamed_addr constant [32 x i8] c" %p = getelementptr inbounds [\00" +@.str4784 = private unnamed_addr constant [66 x i8] c" x i32], ptr @L_owner_arr, i32 0, i32 %e\0A %o = load i32, ptr %p\0A\00" +@.str4785 = private unnamed_addr constant [106 x i8] c" %lid = load i32, ptr @L_localid\0A %eq = icmp eq i32 %o, %lid\0A %r = zext i1 %eq to i32\0A ret i32 %r\0A}\0A\0A\00" +@.str4786 = private unnamed_addr constant [62 x i8] c"@L_netq = internal global [64 x [2048 x i8]] zeroinitializer\0A\00" +@.str4787 = private unnamed_addr constant [56 x i8] c"@L_netlen = internal global [64 x i32] zeroinitializer\0A\00" +@.str4788 = private unnamed_addr constant [36 x i8] c"@L_nethead = internal global i32 0\0A\00" +@.str4789 = private unnamed_addr constant [36 x i8] c"@L_nettail = internal global i32 0\0A\00" +@.str4790 = private unnamed_addr constant [65 x i8] c"define void @L_net_send(i32 %peer, ptr %buf, i32 %len) {\0Aentry:\0A\00" +@.str4791 = private unnamed_addr constant [71 x i8] c" %l0 = icmp slt i32 %len, 0\0A %len1 = select i1 %l0, i32 0, i32 %len\0A\00" +@.str4792 = private unnamed_addr constant [76 x i8] c" %l1 = icmp sgt i32 %len1, 2048\0A %n = select i1 %l1, i32 2048, i32 %len1\0A\00" +@.str4793 = private unnamed_addr constant [65 x i8] c" %t = load i32, ptr @L_nettail\0A %h = load i32, ptr @L_nethead\0A\00" +@.str4794 = private unnamed_addr constant [78 x i8] c" %t1 = add i32 %t, 1\0A %tn = srem i32 %t1, 64\0A %full = icmp eq i32 %tn, %h\0A\00" +@.str4795 = private unnamed_addr constant [39 x i8] c" br i1 %full, label %drop, label %go\0A\00" +@.str4796 = private unnamed_addr constant [5 x i8] c"go:\0A\00" +@.str4797 = private unnamed_addr constant [80 x i8] c" %row = getelementptr inbounds [64 x [2048 x i8]], ptr @L_netq, i32 0, i32 %t\0A\00" +@.str4798 = private unnamed_addr constant [76 x i8] c" %nz = zext i32 %n to i64\0A call ptr @memcpy(ptr %row, ptr %buf, i64 %nz)\0A\00" +@.str4799 = private unnamed_addr constant [97 x i8] c" %lp = getelementptr inbounds [64 x i32], ptr @L_netlen, i32 0, i32 %t\0A store i32 %n, ptr %lp\0A\00" +@.str4800 = private unnamed_addr constant [50 x i8] c" store i32 %tn, ptr @L_nettail\0A br label %drop\0A\00" +@.str4801 = private unnamed_addr constant [21 x i8] c"drop:\0A ret void\0A}\0A\0A\00" +@.str4802 = private unnamed_addr constant [53 x i8] c"define i32 @L_net_poll(ptr %buf, i32 %cap) {\0Aentry:\0A\00" +@.str4803 = private unnamed_addr constant [95 x i8] c" %h = load i32, ptr @L_nethead\0A %t = load i32, ptr @L_nettail\0A %empty = icmp eq i32 %h, %t\0A\00" +@.str4804 = private unnamed_addr constant [40 x i8] c" br i1 %empty, label %none, label %go\0A\00" +@.str4805 = private unnamed_addr constant [5 x i8] c"go:\0A\00" +@.str4806 = private unnamed_addr constant [99 x i8] c" %lp = getelementptr inbounds [64 x i32], ptr @L_netlen, i32 0, i32 %h\0A %ln = load i32, ptr %lp\0A\00" +@.str4807 = private unnamed_addr constant [74 x i8] c" %big = icmp sgt i32 %ln, %cap\0A %n = select i1 %big, i32 %cap, i32 %ln\0A\00" +@.str4808 = private unnamed_addr constant [80 x i8] c" %row = getelementptr inbounds [64 x [2048 x i8]], ptr @L_netq, i32 0, i32 %h\0A\00" +@.str4809 = private unnamed_addr constant [76 x i8] c" %nz = zext i32 %n to i64\0A call ptr @memcpy(ptr %buf, ptr %row, i64 %nz)\0A\00" +@.str4810 = private unnamed_addr constant [93 x i8] c" %h1 = add i32 %h, 1\0A %hn = srem i32 %h1, 64\0A store i32 %hn, ptr @L_nethead\0A ret i32 %n\0A\00" +@.str4811 = private unnamed_addr constant [22 x i8] c"none:\0A ret i32 0\0A}\0A\0A\00" +@.str4812 = private unnamed_addr constant [9 x i8] c"net_send\00" +@.str4813 = private unnamed_addr constant [11 x i8] c"L_net_send\00" +@.str4814 = private unnamed_addr constant [9 x i8] c"net_poll\00" +@.str4815 = private unnamed_addr constant [11 x i8] c"L_net_poll\00" +@.str4816 = private unnamed_addr constant [58 x i8] c"@L_recvbuf = internal global [2048 x i8] zeroinitializer\0A\00" +@.str4817 = private unnamed_addr constant [9 x i8] c"net_poll\00" +@.str4818 = private unnamed_addr constant [53 x i8] c"define void @L_net_pump() {\0Aentry:\0A br label %loop\0A\00" +@.str4819 = private unnamed_addr constant [24 x i8] c"loop:\0A %n = call i32 @\00" +@.str4820 = private unnamed_addr constant [28 x i8] c"(ptr @L_recvbuf, i32 2048)\0A\00" +@.str4821 = private unnamed_addr constant [68 x i8] c" %done = icmp eq i32 %n, 0\0A br i1 %done, label %fin, label %body\0A\00" +@.str4822 = private unnamed_addr constant [41 x i8] c"body:\0A %eid = load i32, ptr @L_recvbuf\0A\00" +@.str4823 = private unnamed_addr constant [5 x i8] c" %c\00" +@.str4824 = private unnamed_addr constant [22 x i8] c" = icmp eq i32 %eid, \00" +@.str4825 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4826 = private unnamed_addr constant [11 x i8] c" br i1 %c\00" +@.str4827 = private unnamed_addr constant [11 x i8] c", label %h\00" +@.str4828 = private unnamed_addr constant [11 x i8] c", label %x\00" +@.str4829 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4830 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4831 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4832 = private unnamed_addr constant [2 x i8] c"_\00" +@.str4833 = private unnamed_addr constant [6 x i8] c" %fa\00" +@.str4834 = private unnamed_addr constant [51 x i8] c" = getelementptr inbounds i8, ptr @L_recvbuf, i32 \00" +@.str4835 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4836 = private unnamed_addr constant [6 x i8] c" %fv\00" +@.str4837 = private unnamed_addr constant [9 x i8] c" = load \00" +@.str4838 = private unnamed_addr constant [10 x i8] c", ptr %fa\00" +@.str4839 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4840 = private unnamed_addr constant [3 x i8] c", \00" +@.str4841 = private unnamed_addr constant [5 x i8] c" %fv\00" +@.str4842 = private unnamed_addr constant [17 x i8] c" call void @ev_\00" +@.str4843 = private unnamed_addr constant [2 x i8] c"(\00" +@.str4844 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4845 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str4846 = private unnamed_addr constant [2 x i8] c"x\00" +@.str4847 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str4848 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str4849 = private unnamed_addr constant [20 x i8] c"fin:\0A ret void\0A}\0A\0A\00" +@.str4850 = private unnamed_addr constant [58 x i8] c"@L_sendbuf = internal global [2048 x i8] zeroinitializer\0A\00" +@.str4851 = private unnamed_addr constant [6 x i8] c"panel\00" +@.str4852 = private unnamed_addr constant [4 x i8] c"col\00" +@.str4853 = private unnamed_addr constant [4 x i8] c"row\00" +@.str4854 = private unnamed_addr constant [6 x i8] c"label\00" +@.str4855 = private unnamed_addr constant [7 x i8] c"button\00" +@.str4856 = private unnamed_addr constant [6 x i8] c"image\00" +@.str4857 = private unnamed_addr constant [7 x i8] c"spacer\00" +@.str4858 = private unnamed_addr constant [3 x i8] c"id\00" +@.str4859 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" +@.str4860 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str4861 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str4862 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4863 = private unnamed_addr constant [2 x i8] c"w\00" +@.str4864 = private unnamed_addr constant [2 x i8] c"h\00" +@.str4865 = private unnamed_addr constant [2 x i8] c"x\00" +@.str4866 = private unnamed_addr constant [2 x i8] c"y\00" +@.str4867 = private unnamed_addr constant [4 x i8] c"pad\00" +@.str4868 = private unnamed_addr constant [4 x i8] c"gap\00" +@.str4869 = private unnamed_addr constant [3 x i8] c"bg\00" +@.str4870 = private unnamed_addr constant [3 x i8] c"fg\00" +@.str4871 = private unnamed_addr constant [7 x i8] c"border\00" +@.str4872 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str4873 = private unnamed_addr constant [5 x i8] c"font\00" +@.str4874 = private unnamed_addr constant [5 x i8] c"size\00" +@.str4875 = private unnamed_addr constant [6 x i8] c"inset\00" +@.str4876 = private unnamed_addr constant [6 x i8] c"focus\00" +@.str4877 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" +@.str4878 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4879 = private unnamed_addr constant [2 x i8] c"1\00" +@.str4880 = private unnamed_addr constant [3 x i8] c"id\00" +@.str4881 = private unnamed_addr constant [5 x i8] c"text\00" +@.str4882 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" +@.str4883 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4884 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str4885 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str4886 = private unnamed_addr constant [6 x i8] c"image\00" +@.str4887 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" +@.str4888 = private unnamed_addr constant [2 x i8] c")\00" +@.str4889 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str4890 = private unnamed_addr constant [6 x i8] c"align\00" +@.str4891 = private unnamed_addr constant [7 x i8] c"center\00" +@.str4892 = private unnamed_addr constant [4 x i8] c"end\00" +@.str4893 = private unnamed_addr constant [2 x i8] c"1\00" +@.str4894 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" +@.str4895 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str4896 = private unnamed_addr constant [3 x i8] c", \00" +@.str4897 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str4898 = private unnamed_addr constant [5 x i8] c"void\00" +@.str4899 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" +@.str4900 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4901 = private unnamed_addr constant [9 x i8] c" store \00" +@.str4902 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str4903 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str4904 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4905 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str4906 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str4907 = private unnamed_addr constant [5 x i8] c"void\00" +@.str4908 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str4909 = private unnamed_addr constant [6 x i8] c"load \00" +@.str4910 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" +@.str4911 = private unnamed_addr constant [7 x i8] c" ret \00" +@.str4912 = private unnamed_addr constant [2 x i8] c" \00" +@.str4913 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4914 = private unnamed_addr constant [8 x i8] c"define \00" +@.str4915 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str4916 = private unnamed_addr constant [2 x i8] c"(\00" +@.str4917 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" +@.str4918 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str4919 = private unnamed_addr constant [4 x i8] c"int\00" +@.str4920 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" +@.str4921 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str4922 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str4923 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" +@.str4924 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str4925 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str4926 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" +@.str4927 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str4928 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4929 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str4930 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str4931 = private unnamed_addr constant [3 x i8] c"wb\00" +@.str4932 = private unnamed_addr constant [7 x i8] c".ludic\00" +@.str4933 = private unnamed_addr constant [2 x i8] c"/\00" +@.str4934 = private unnamed_addr constant [6 x i8] c"ludic\00" +@.str4935 = private unnamed_addr constant [11 x i8] c"--windowed\00" +@.str4936 = private unnamed_addr constant [11 x i8] c"--headless\00" +@.str4937 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" +@.str4938 = private unnamed_addr constant [6 x i8] c"--fmt\00" +@.str4939 = private unnamed_addr constant [13 x i8] c"--save-temps\00" +@.str4940 = private unnamed_addr constant [6 x i8] c"--run\00" +@.str4941 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str4942 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" +@.str4943 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str4944 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" +@.str4945 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" +@.str4946 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" +@.str4947 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str4948 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str4949 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" +@.str4950 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" +@.str4951 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str4952 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" +@.str4953 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" +@.str4954 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" +@.str4955 = private unnamed_addr constant [2 x i8] c" \00" +@.str4956 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" +@.str4957 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str4958 = private unnamed_addr constant [7 x i8] c"rm -f \00" +@.str4959 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" define i32 @fn_str_eq(ptr %a, ptr %b) { entry: br label %loop @@ -4404,9 +6249,9 @@ entry: %t417 = alloca i32 %t418 = alloca i32 %t419 = alloca i32 - %t456 = alloca i32 - %t465 = alloca i32 - %t466 = alloca i32 + %t463 = alloca i32 + %t472 = alloca i32 + %t473 = alloca i32 store ptr %arg_src, ptr %t0 %t1 = getelementptr %LSlice, ptr null, i32 1 %t2 = ptrtoint ptr %t1 to i64 @@ -5079,359 +6924,370 @@ scend107: %t435 = icmp ne i32 %t434, 0 br i1 %t435, label %wbody104, label %wend105 wbody104: - %t436 = load i32, ptr %t417 - %t437 = mul i32 %t436, 10 - %t438 = load ptr, ptr %t0 - %t439 = load i32, ptr %t7 - %t440 = getelementptr inbounds i8, ptr %t438, i32 %t439 - %t441 = load i8, ptr %t440 - %t442 = zext i8 %t441 to i32 - %t443 = sub i32 %t442, 48 - %t444 = add i32 %t437, %t443 - store i32 %t444, ptr %t417 - %t445 = load i32, ptr %t418 - %t446 = mul i32 %t445, 10 - store i32 %t446, ptr %t418 - %t447 = load i32, ptr %t7 - %t448 = add i32 %t447, 1 - store i32 %t448, ptr %t7 + %t436 = load i32, ptr %t418 + %t437 = icmp slt i32 %t436, 10000 + %t438 = zext i1 %t437 to i32 + %t439 = icmp ne i32 %t438, 0 + br i1 %t439, label %then108, label %ifend110 +then108: + %t440 = load i32, ptr %t417 + %t441 = mul i32 %t440, 10 + %t442 = load ptr, ptr %t0 + %t443 = load i32, ptr %t7 + %t444 = getelementptr inbounds i8, ptr %t442, i32 %t443 + %t445 = load i8, ptr %t444 + %t446 = zext i8 %t445 to i32 + %t447 = sub i32 %t446, 48 + %t448 = add i32 %t441, %t447 + store i32 %t448, ptr %t417 + %t449 = load i32, ptr %t418 + %t450 = mul i32 %t449, 10 + store i32 %t450, ptr %t418 + br label %ifend110 +ifend110: + %t451 = load i32, ptr %t7 + %t452 = add i32 %t451, 1 + store i32 %t452, ptr %t7 br label %wcond103 wend105: - %t449 = load i32, ptr %t355 - %t450 = shl i32 %t449, 16 - %t451 = load i32, ptr %t417 - %t452 = shl i32 %t451, 16 - %t453 = load i32, ptr %t418 - %t454 = sdiv i32 %t452, %t453 - %t455 = add i32 %t450, %t454 - store i32 %t455, ptr %t456 - %t457 = load i32, ptr %t456 - %t458 = load i32, ptr %t8 - call void @fn_tok_push(i32 6, ptr null, i32 %t457, i32 %t458) + %t453 = load i32, ptr %t355 + %t454 = shl i32 %t453, 16 + %t455 = load i32, ptr %t417 + %t456 = shl i32 %t455, 16 + %t457 = load i32, ptr %t418 + %t458 = lshr i32 %t457, 1 + %t459 = add i32 %t456, %t458 + %t460 = load i32, ptr %t418 + %t461 = sdiv i32 %t459, %t460 + %t462 = add i32 %t454, %t461 + store i32 %t462, ptr %t463 + %t464 = load i32, ptr %t463 + %t465 = load i32, ptr %t8 + call void @fn_tok_push(i32 6, ptr null, i32 %t464, i32 %t465) br label %wcond0 ifend102: - %t459 = load i32, ptr %t355 - %t460 = load i32, ptr %t8 - call void @fn_tok_push(i32 1, ptr null, i32 %t459, i32 %t460) + %t466 = load i32, ptr %t355 + %t467 = load i32, ptr %t8 + call void @fn_tok_push(i32 1, ptr null, i32 %t466, i32 %t467) br label %wcond0 ifend69: - %t461 = load i32, ptr %t23 - %t462 = call i32 @fn_char_is_alpha(i32 %t461) - %t463 = icmp ne i32 %t462, 0 - br i1 %t463, label %then108, label %ifend110 -then108: - %t464 = load i32, ptr %t7 - store i32 %t464, ptr %t465 - br label %wcond111 -wcond111: - %t467 = load i32, ptr %t7 - %t468 = load i32, ptr %t12 - %t469 = icmp slt i32 %t467, %t468 - %t470 = zext i1 %t469 to i32 - %t471 = icmp ne i32 %t470, 0 - %t472 = zext i1 %t471 to i32 - store i32 %t472, ptr %t466 - br i1 %t471, label %sc114, label %scend115 -sc114: - %t473 = load ptr, ptr %t0 + %t468 = load i32, ptr %t23 + %t469 = call i32 @fn_char_is_alpha(i32 %t468) + %t470 = icmp ne i32 %t469, 0 + br i1 %t470, label %then111, label %ifend113 +then111: + %t471 = load i32, ptr %t7 + store i32 %t471, ptr %t472 + br label %wcond114 +wcond114: %t474 = load i32, ptr %t7 - %t475 = getelementptr inbounds i8, ptr %t473, i32 %t474 - %t476 = load i8, ptr %t475 - %t477 = zext i8 %t476 to i32 - %t478 = call i32 @fn_char_is_alnum(i32 %t477) - %t479 = icmp ne i32 %t478, 0 - %t480 = zext i1 %t479 to i32 - store i32 %t480, ptr %t466 - br label %scend115 -scend115: - %t481 = load i32, ptr %t466 - %t482 = icmp ne i32 %t481, 0 - br i1 %t482, label %wbody112, label %wend113 -wbody112: - %t483 = load i32, ptr %t7 - %t484 = add i32 %t483, 1 - store i32 %t484, ptr %t7 - br label %wcond111 -wend113: - %t485 = load ptr, ptr %t0 - %t486 = load i32, ptr %t465 - %t487 = load i32, ptr %t7 - %t488 = call ptr @fn_str_slice(ptr %t485, i32 %t486, i32 %t487) - %t489 = load i32, ptr %t8 - call void @fn_tok_push(i32 0, ptr %t488, i32 0, i32 %t489) + %t475 = load i32, ptr %t12 + %t476 = icmp slt i32 %t474, %t475 + %t477 = zext i1 %t476 to i32 + %t478 = icmp ne i32 %t477, 0 + %t479 = zext i1 %t478 to i32 + store i32 %t479, ptr %t473 + br i1 %t478, label %sc117, label %scend118 +sc117: + %t480 = load ptr, ptr %t0 + %t481 = load i32, ptr %t7 + %t482 = getelementptr inbounds i8, ptr %t480, i32 %t481 + %t483 = load i8, ptr %t482 + %t484 = zext i8 %t483 to i32 + %t485 = call i32 @fn_char_is_alnum(i32 %t484) + %t486 = icmp ne i32 %t485, 0 + %t487 = zext i1 %t486 to i32 + store i32 %t487, ptr %t473 + br label %scend118 +scend118: + %t488 = load i32, ptr %t473 + %t489 = icmp ne i32 %t488, 0 + br i1 %t489, label %wbody115, label %wend116 +wbody115: + %t490 = load i32, ptr %t7 + %t491 = add i32 %t490, 1 + store i32 %t491, ptr %t7 + br label %wcond114 +wend116: + %t492 = load ptr, ptr %t0 + %t493 = load i32, ptr %t472 + %t494 = load i32, ptr %t7 + %t495 = call ptr @fn_str_slice(ptr %t492, i32 %t493, i32 %t494) + %t496 = load i32, ptr %t8 + call void @fn_tok_push(i32 0, ptr %t495, i32 0, i32 %t496) br label %wcond0 -ifend110: - %t490 = load i32, ptr %t23 - %t491 = icmp eq i32 %t490, 59 - %t492 = zext i1 %t491 to i32 - %t493 = icmp ne i32 %t492, 0 - br i1 %t493, label %then116, label %ifend118 -then116: - %t494 = load i32, ptr %t8 - call void @fn_tok_push(i32 4, ptr null, i32 0, i32 %t494) - %t495 = load i32, ptr %t7 - %t496 = add i32 %t495, 1 - store i32 %t496, ptr %t7 - br label %wcond0 -ifend118: - %t497 = load ptr, ptr %t0 - %t498 = load i32, ptr %t7 - %t499 = call i32 @fn_two_at(ptr %t497, i32 %t498, i32 45, i32 62) +ifend113: + %t497 = load i32, ptr %t23 + %t498 = icmp eq i32 %t497, 59 + %t499 = zext i1 %t498 to i32 %t500 = icmp ne i32 %t499, 0 br i1 %t500, label %then119, label %ifend121 then119: - %t501 = load ptr, ptr %t0 + %t501 = load i32, ptr %t8 + call void @fn_tok_push(i32 4, ptr null, i32 0, i32 %t501) %t502 = load i32, ptr %t7 - %t503 = load i32, ptr %t7 - %t504 = add i32 %t503, 2 - %t505 = call ptr @fn_str_slice(ptr %t501, i32 %t502, i32 %t504) - %t506 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t505, i32 0, i32 %t506) - %t507 = load i32, ptr %t7 - %t508 = add i32 %t507, 2 - store i32 %t508, ptr %t7 + %t503 = add i32 %t502, 1 + store i32 %t503, ptr %t7 br label %wcond0 ifend121: - %t509 = load ptr, ptr %t0 - %t510 = load i32, ptr %t7 - %t511 = call i32 @fn_two_at(ptr %t509, i32 %t510, i32 61, i32 62) - %t512 = icmp ne i32 %t511, 0 - br i1 %t512, label %then122, label %ifend124 + %t504 = load ptr, ptr %t0 + %t505 = load i32, ptr %t7 + %t506 = call i32 @fn_two_at(ptr %t504, i32 %t505, i32 45, i32 62) + %t507 = icmp ne i32 %t506, 0 + br i1 %t507, label %then122, label %ifend124 then122: - %t513 = load ptr, ptr %t0 + %t508 = load ptr, ptr %t0 + %t509 = load i32, ptr %t7 + %t510 = load i32, ptr %t7 + %t511 = add i32 %t510, 2 + %t512 = call ptr @fn_str_slice(ptr %t508, i32 %t509, i32 %t511) + %t513 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t512, i32 0, i32 %t513) %t514 = load i32, ptr %t7 - %t515 = load i32, ptr %t7 - %t516 = add i32 %t515, 2 - %t517 = call ptr @fn_str_slice(ptr %t513, i32 %t514, i32 %t516) - %t518 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t517, i32 0, i32 %t518) - %t519 = load i32, ptr %t7 - %t520 = add i32 %t519, 2 - store i32 %t520, ptr %t7 + %t515 = add i32 %t514, 2 + store i32 %t515, ptr %t7 br label %wcond0 ifend124: - %t521 = load ptr, ptr %t0 - %t522 = load i32, ptr %t7 - %t523 = call i32 @fn_two_at(ptr %t521, i32 %t522, i32 61, i32 61) - %t524 = icmp ne i32 %t523, 0 - br i1 %t524, label %then125, label %ifend127 + %t516 = load ptr, ptr %t0 + %t517 = load i32, ptr %t7 + %t518 = call i32 @fn_two_at(ptr %t516, i32 %t517, i32 61, i32 62) + %t519 = icmp ne i32 %t518, 0 + br i1 %t519, label %then125, label %ifend127 then125: - %t525 = load ptr, ptr %t0 + %t520 = load ptr, ptr %t0 + %t521 = load i32, ptr %t7 + %t522 = load i32, ptr %t7 + %t523 = add i32 %t522, 2 + %t524 = call ptr @fn_str_slice(ptr %t520, i32 %t521, i32 %t523) + %t525 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t524, i32 0, i32 %t525) %t526 = load i32, ptr %t7 - %t527 = load i32, ptr %t7 - %t528 = add i32 %t527, 2 - %t529 = call ptr @fn_str_slice(ptr %t525, i32 %t526, i32 %t528) - %t530 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t529, i32 0, i32 %t530) - %t531 = load i32, ptr %t7 - %t532 = add i32 %t531, 2 - store i32 %t532, ptr %t7 + %t527 = add i32 %t526, 2 + store i32 %t527, ptr %t7 br label %wcond0 ifend127: - %t533 = load ptr, ptr %t0 - %t534 = load i32, ptr %t7 - %t535 = call i32 @fn_two_at(ptr %t533, i32 %t534, i32 33, i32 61) - %t536 = icmp ne i32 %t535, 0 - br i1 %t536, label %then128, label %ifend130 + %t528 = load ptr, ptr %t0 + %t529 = load i32, ptr %t7 + %t530 = call i32 @fn_two_at(ptr %t528, i32 %t529, i32 61, i32 61) + %t531 = icmp ne i32 %t530, 0 + br i1 %t531, label %then128, label %ifend130 then128: - %t537 = load ptr, ptr %t0 + %t532 = load ptr, ptr %t0 + %t533 = load i32, ptr %t7 + %t534 = load i32, ptr %t7 + %t535 = add i32 %t534, 2 + %t536 = call ptr @fn_str_slice(ptr %t532, i32 %t533, i32 %t535) + %t537 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t536, i32 0, i32 %t537) %t538 = load i32, ptr %t7 - %t539 = load i32, ptr %t7 - %t540 = add i32 %t539, 2 - %t541 = call ptr @fn_str_slice(ptr %t537, i32 %t538, i32 %t540) - %t542 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t541, i32 0, i32 %t542) - %t543 = load i32, ptr %t7 - %t544 = add i32 %t543, 2 - store i32 %t544, ptr %t7 + %t539 = add i32 %t538, 2 + store i32 %t539, ptr %t7 br label %wcond0 ifend130: - %t545 = load ptr, ptr %t0 - %t546 = load i32, ptr %t7 - %t547 = call i32 @fn_two_at(ptr %t545, i32 %t546, i32 60, i32 61) - %t548 = icmp ne i32 %t547, 0 - br i1 %t548, label %then131, label %ifend133 + %t540 = load ptr, ptr %t0 + %t541 = load i32, ptr %t7 + %t542 = call i32 @fn_two_at(ptr %t540, i32 %t541, i32 33, i32 61) + %t543 = icmp ne i32 %t542, 0 + br i1 %t543, label %then131, label %ifend133 then131: - %t549 = load ptr, ptr %t0 + %t544 = load ptr, ptr %t0 + %t545 = load i32, ptr %t7 + %t546 = load i32, ptr %t7 + %t547 = add i32 %t546, 2 + %t548 = call ptr @fn_str_slice(ptr %t544, i32 %t545, i32 %t547) + %t549 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t548, i32 0, i32 %t549) %t550 = load i32, ptr %t7 - %t551 = load i32, ptr %t7 - %t552 = add i32 %t551, 2 - %t553 = call ptr @fn_str_slice(ptr %t549, i32 %t550, i32 %t552) - %t554 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t553, i32 0, i32 %t554) - %t555 = load i32, ptr %t7 - %t556 = add i32 %t555, 2 - store i32 %t556, ptr %t7 + %t551 = add i32 %t550, 2 + store i32 %t551, ptr %t7 br label %wcond0 ifend133: - %t557 = load ptr, ptr %t0 - %t558 = load i32, ptr %t7 - %t559 = call i32 @fn_two_at(ptr %t557, i32 %t558, i32 62, i32 61) - %t560 = icmp ne i32 %t559, 0 - br i1 %t560, label %then134, label %ifend136 + %t552 = load ptr, ptr %t0 + %t553 = load i32, ptr %t7 + %t554 = call i32 @fn_two_at(ptr %t552, i32 %t553, i32 60, i32 61) + %t555 = icmp ne i32 %t554, 0 + br i1 %t555, label %then134, label %ifend136 then134: - %t561 = load ptr, ptr %t0 + %t556 = load ptr, ptr %t0 + %t557 = load i32, ptr %t7 + %t558 = load i32, ptr %t7 + %t559 = add i32 %t558, 2 + %t560 = call ptr @fn_str_slice(ptr %t556, i32 %t557, i32 %t559) + %t561 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t560, i32 0, i32 %t561) %t562 = load i32, ptr %t7 - %t563 = load i32, ptr %t7 - %t564 = add i32 %t563, 2 - %t565 = call ptr @fn_str_slice(ptr %t561, i32 %t562, i32 %t564) - %t566 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t565, i32 0, i32 %t566) - %t567 = load i32, ptr %t7 - %t568 = add i32 %t567, 2 - store i32 %t568, ptr %t7 + %t563 = add i32 %t562, 2 + store i32 %t563, ptr %t7 br label %wcond0 ifend136: - %t569 = load ptr, ptr %t0 - %t570 = load i32, ptr %t7 - %t571 = call i32 @fn_two_at(ptr %t569, i32 %t570, i32 43, i32 61) - %t572 = icmp ne i32 %t571, 0 - br i1 %t572, label %then137, label %ifend139 + %t564 = load ptr, ptr %t0 + %t565 = load i32, ptr %t7 + %t566 = call i32 @fn_two_at(ptr %t564, i32 %t565, i32 62, i32 61) + %t567 = icmp ne i32 %t566, 0 + br i1 %t567, label %then137, label %ifend139 then137: - %t573 = load ptr, ptr %t0 + %t568 = load ptr, ptr %t0 + %t569 = load i32, ptr %t7 + %t570 = load i32, ptr %t7 + %t571 = add i32 %t570, 2 + %t572 = call ptr @fn_str_slice(ptr %t568, i32 %t569, i32 %t571) + %t573 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t572, i32 0, i32 %t573) %t574 = load i32, ptr %t7 - %t575 = load i32, ptr %t7 - %t576 = add i32 %t575, 2 - %t577 = call ptr @fn_str_slice(ptr %t573, i32 %t574, i32 %t576) - %t578 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t577, i32 0, i32 %t578) - %t579 = load i32, ptr %t7 - %t580 = add i32 %t579, 2 - store i32 %t580, ptr %t7 + %t575 = add i32 %t574, 2 + store i32 %t575, ptr %t7 br label %wcond0 ifend139: - %t581 = load ptr, ptr %t0 - %t582 = load i32, ptr %t7 - %t583 = call i32 @fn_two_at(ptr %t581, i32 %t582, i32 45, i32 61) - %t584 = icmp ne i32 %t583, 0 - br i1 %t584, label %then140, label %ifend142 + %t576 = load ptr, ptr %t0 + %t577 = load i32, ptr %t7 + %t578 = call i32 @fn_two_at(ptr %t576, i32 %t577, i32 43, i32 61) + %t579 = icmp ne i32 %t578, 0 + br i1 %t579, label %then140, label %ifend142 then140: - %t585 = load ptr, ptr %t0 + %t580 = load ptr, ptr %t0 + %t581 = load i32, ptr %t7 + %t582 = load i32, ptr %t7 + %t583 = add i32 %t582, 2 + %t584 = call ptr @fn_str_slice(ptr %t580, i32 %t581, i32 %t583) + %t585 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t584, i32 0, i32 %t585) %t586 = load i32, ptr %t7 - %t587 = load i32, ptr %t7 - %t588 = add i32 %t587, 2 - %t589 = call ptr @fn_str_slice(ptr %t585, i32 %t586, i32 %t588) - %t590 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t589, i32 0, i32 %t590) - %t591 = load i32, ptr %t7 - %t592 = add i32 %t591, 2 - store i32 %t592, ptr %t7 + %t587 = add i32 %t586, 2 + store i32 %t587, ptr %t7 br label %wcond0 ifend142: - %t593 = load ptr, ptr %t0 - %t594 = load i32, ptr %t7 - %t595 = call i32 @fn_two_at(ptr %t593, i32 %t594, i32 42, i32 61) - %t596 = icmp ne i32 %t595, 0 - br i1 %t596, label %then143, label %ifend145 + %t588 = load ptr, ptr %t0 + %t589 = load i32, ptr %t7 + %t590 = call i32 @fn_two_at(ptr %t588, i32 %t589, i32 45, i32 61) + %t591 = icmp ne i32 %t590, 0 + br i1 %t591, label %then143, label %ifend145 then143: - %t597 = load ptr, ptr %t0 + %t592 = load ptr, ptr %t0 + %t593 = load i32, ptr %t7 + %t594 = load i32, ptr %t7 + %t595 = add i32 %t594, 2 + %t596 = call ptr @fn_str_slice(ptr %t592, i32 %t593, i32 %t595) + %t597 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t596, i32 0, i32 %t597) %t598 = load i32, ptr %t7 - %t599 = load i32, ptr %t7 - %t600 = add i32 %t599, 2 - %t601 = call ptr @fn_str_slice(ptr %t597, i32 %t598, i32 %t600) - %t602 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t601, i32 0, i32 %t602) - %t603 = load i32, ptr %t7 - %t604 = add i32 %t603, 2 - store i32 %t604, ptr %t7 + %t599 = add i32 %t598, 2 + store i32 %t599, ptr %t7 br label %wcond0 ifend145: - %t605 = load ptr, ptr %t0 - %t606 = load i32, ptr %t7 - %t607 = call i32 @fn_two_at(ptr %t605, i32 %t606, i32 47, i32 61) - %t608 = icmp ne i32 %t607, 0 - br i1 %t608, label %then146, label %ifend148 + %t600 = load ptr, ptr %t0 + %t601 = load i32, ptr %t7 + %t602 = call i32 @fn_two_at(ptr %t600, i32 %t601, i32 42, i32 61) + %t603 = icmp ne i32 %t602, 0 + br i1 %t603, label %then146, label %ifend148 then146: - %t609 = load ptr, ptr %t0 + %t604 = load ptr, ptr %t0 + %t605 = load i32, ptr %t7 + %t606 = load i32, ptr %t7 + %t607 = add i32 %t606, 2 + %t608 = call ptr @fn_str_slice(ptr %t604, i32 %t605, i32 %t607) + %t609 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t608, i32 0, i32 %t609) %t610 = load i32, ptr %t7 - %t611 = load i32, ptr %t7 - %t612 = add i32 %t611, 2 - %t613 = call ptr @fn_str_slice(ptr %t609, i32 %t610, i32 %t612) - %t614 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t613, i32 0, i32 %t614) - %t615 = load i32, ptr %t7 - %t616 = add i32 %t615, 2 - store i32 %t616, ptr %t7 + %t611 = add i32 %t610, 2 + store i32 %t611, ptr %t7 br label %wcond0 ifend148: - %t617 = load ptr, ptr %t0 - %t618 = load i32, ptr %t7 - %t619 = call i32 @fn_two_at(ptr %t617, i32 %t618, i32 46, i32 46) - %t620 = icmp ne i32 %t619, 0 - br i1 %t620, label %then149, label %ifend151 + %t612 = load ptr, ptr %t0 + %t613 = load i32, ptr %t7 + %t614 = call i32 @fn_two_at(ptr %t612, i32 %t613, i32 47, i32 61) + %t615 = icmp ne i32 %t614, 0 + br i1 %t615, label %then149, label %ifend151 then149: - %t621 = load ptr, ptr %t0 + %t616 = load ptr, ptr %t0 + %t617 = load i32, ptr %t7 + %t618 = load i32, ptr %t7 + %t619 = add i32 %t618, 2 + %t620 = call ptr @fn_str_slice(ptr %t616, i32 %t617, i32 %t619) + %t621 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t620, i32 0, i32 %t621) %t622 = load i32, ptr %t7 - %t623 = load i32, ptr %t7 - %t624 = add i32 %t623, 2 - %t625 = call ptr @fn_str_slice(ptr %t621, i32 %t622, i32 %t624) - %t626 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t625, i32 0, i32 %t626) - %t627 = load i32, ptr %t7 - %t628 = add i32 %t627, 2 - store i32 %t628, ptr %t7 + %t623 = add i32 %t622, 2 + store i32 %t623, ptr %t7 br label %wcond0 ifend151: - %t629 = load ptr, ptr %t0 - %t630 = load i32, ptr %t7 - %t631 = call i32 @fn_two_at(ptr %t629, i32 %t630, i32 60, i32 60) - %t632 = icmp ne i32 %t631, 0 - br i1 %t632, label %then152, label %ifend154 + %t624 = load ptr, ptr %t0 + %t625 = load i32, ptr %t7 + %t626 = call i32 @fn_two_at(ptr %t624, i32 %t625, i32 46, i32 46) + %t627 = icmp ne i32 %t626, 0 + br i1 %t627, label %then152, label %ifend154 then152: - %t633 = load ptr, ptr %t0 + %t628 = load ptr, ptr %t0 + %t629 = load i32, ptr %t7 + %t630 = load i32, ptr %t7 + %t631 = add i32 %t630, 2 + %t632 = call ptr @fn_str_slice(ptr %t628, i32 %t629, i32 %t631) + %t633 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t632, i32 0, i32 %t633) %t634 = load i32, ptr %t7 - %t635 = load i32, ptr %t7 - %t636 = add i32 %t635, 2 - %t637 = call ptr @fn_str_slice(ptr %t633, i32 %t634, i32 %t636) - %t638 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t637, i32 0, i32 %t638) - %t639 = load i32, ptr %t7 - %t640 = add i32 %t639, 2 - store i32 %t640, ptr %t7 + %t635 = add i32 %t634, 2 + store i32 %t635, ptr %t7 br label %wcond0 ifend154: - %t641 = load ptr, ptr %t0 - %t642 = load i32, ptr %t7 - %t643 = call i32 @fn_two_at(ptr %t641, i32 %t642, i32 62, i32 62) - %t644 = icmp ne i32 %t643, 0 - br i1 %t644, label %then155, label %ifend157 + %t636 = load ptr, ptr %t0 + %t637 = load i32, ptr %t7 + %t638 = call i32 @fn_two_at(ptr %t636, i32 %t637, i32 60, i32 60) + %t639 = icmp ne i32 %t638, 0 + br i1 %t639, label %then155, label %ifend157 then155: - %t645 = load ptr, ptr %t0 + %t640 = load ptr, ptr %t0 + %t641 = load i32, ptr %t7 + %t642 = load i32, ptr %t7 + %t643 = add i32 %t642, 2 + %t644 = call ptr @fn_str_slice(ptr %t640, i32 %t641, i32 %t643) + %t645 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t644, i32 0, i32 %t645) %t646 = load i32, ptr %t7 - %t647 = load i32, ptr %t7 - %t648 = add i32 %t647, 2 - %t649 = call ptr @fn_str_slice(ptr %t645, i32 %t646, i32 %t648) - %t650 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t649, i32 0, i32 %t650) - %t651 = load i32, ptr %t7 - %t652 = add i32 %t651, 2 - store i32 %t652, ptr %t7 + %t647 = add i32 %t646, 2 + store i32 %t647, ptr %t7 br label %wcond0 ifend157: - %t653 = load i32, ptr %t23 - %t654 = call i32 @fn_is_op1(i32 %t653) - %t655 = icmp ne i32 %t654, 0 - br i1 %t655, label %then158, label %ifend160 + %t648 = load ptr, ptr %t0 + %t649 = load i32, ptr %t7 + %t650 = call i32 @fn_two_at(ptr %t648, i32 %t649, i32 62, i32 62) + %t651 = icmp ne i32 %t650, 0 + br i1 %t651, label %then158, label %ifend160 then158: - %t656 = load ptr, ptr %t0 - %t657 = load i32, ptr %t7 + %t652 = load ptr, ptr %t0 + %t653 = load i32, ptr %t7 + %t654 = load i32, ptr %t7 + %t655 = add i32 %t654, 2 + %t656 = call ptr @fn_str_slice(ptr %t652, i32 %t653, i32 %t655) + %t657 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t656, i32 0, i32 %t657) %t658 = load i32, ptr %t7 - %t659 = add i32 %t658, 1 - %t660 = call ptr @fn_str_slice(ptr %t656, i32 %t657, i32 %t659) - %t661 = load i32, ptr %t8 - call void @fn_tok_push(i32 3, ptr %t660, i32 0, i32 %t661) - %t662 = load i32, ptr %t7 - %t663 = add i32 %t662, 1 - store i32 %t663, ptr %t7 + %t659 = add i32 %t658, 2 + store i32 %t659, ptr %t7 br label %wcond0 ifend160: + %t660 = load i32, ptr %t23 + %t661 = call i32 @fn_is_op1(i32 %t660) + %t662 = icmp ne i32 %t661, 0 + br i1 %t662, label %then161, label %ifend163 +then161: + %t663 = load ptr, ptr %t0 %t664 = load i32, ptr %t7 - %t665 = add i32 %t664, 1 - store i32 %t665, ptr %t7 + %t665 = load i32, ptr %t7 + %t666 = add i32 %t665, 1 + %t667 = call ptr @fn_str_slice(ptr %t663, i32 %t664, i32 %t666) + %t668 = load i32, ptr %t8 + call void @fn_tok_push(i32 3, ptr %t667, i32 0, i32 %t668) + %t669 = load i32, ptr %t7 + %t670 = add i32 %t669, 1 + store i32 %t670, ptr %t7 + br label %wcond0 +ifend163: + %t671 = load i32, ptr %t7 + %t672 = add i32 %t671, 1 + store i32 %t672, ptr %t7 br label %wcond0 wend2: - %t666 = load i32, ptr %t8 - call void @fn_tok_push(i32 5, ptr null, i32 0, i32 %t666) + %t673 = load i32, ptr %t8 + call void @fn_tok_push(i32 5, ptr null, i32 0, i32 %t673) br label %ret ret: ret void @@ -14997,17 +16853,20 @@ entry: call void @fn_emith(ptr @.str396) call void @fn_emith(ptr @.str397) call void @fn_emith(ptr @.str398) + call void @fn_emith(ptr @.str399) + call void @fn_emith(ptr @.str400) + call void @fn_emith(ptr @.str401) %t0 = load ptr, ptr @g_g_game_name %t1 = call i64 @strlen(ptr %t0) %t2 = trunc i64 %t1 to i32 %t3 = add i32 %t2, 1 %t4 = call ptr @fn_itoa(i32 %t3) call void @fn_emith(ptr %t4) - call void @fn_emith(ptr @.str399) + call void @fn_emith(ptr @.str402) %t5 = load ptr, ptr @g_g_game_name call void @fn_emith(ptr %t5) - call void @fn_emith(ptr @.str400) - call void @fn_emith(ptr @.str401) + call void @fn_emith(ptr @.str403) + call void @fn_emith(ptr @.str404) store i32 0, ptr %t6 br label %wcond0 wcond0: @@ -15040,7 +16899,7 @@ then3: %t29 = load ptr, ptr %t28 %t30 = call ptr @fn_layout_ty(ptr %t29) call void @fn_emith(ptr %t30) - call void @fn_emith(ptr @.str402) + call void @fn_emith(ptr @.str405) %t31 = load ptr, ptr %t20 %t32 = getelementptr inbounds %Cmp_Node, ptr %t31, i32 0, i32 7 %t33 = load ptr, ptr %t32 @@ -15051,7 +16910,7 @@ then3: %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then6, label %ifend8 then6: - call void @fn_emith(ptr @.str403) + call void @fn_emith(ptr @.str406) br label %ifend8 ifend8: store i32 0, ptr %t39 @@ -15074,7 +16933,7 @@ wbody10: %t52 = icmp ne i32 %t51, 0 br i1 %t52, label %then12, label %ifend14 then12: - call void @fn_emith(ptr @.str404) + call void @fn_emith(ptr @.str407) br label %ifend14 ifend14: %t53 = load ptr, ptr %t20 @@ -15094,7 +16953,7 @@ ifend14: store i32 %t65, ptr %t39 br label %wcond9 wend11: - call void @fn_emith(ptr @.str405) + call void @fn_emith(ptr @.str408) br label %ifend5 ifend5: %t66 = load i32, ptr %t6 @@ -15129,22 +16988,22 @@ wbody16: %t87 = icmp ne i32 %t86, 0 br i1 %t87, label %then18, label %ifend20 then18: - call void @fn_emith(ptr @.str406) + call void @fn_emith(ptr @.str409) %t88 = load ptr, ptr %t81 %t89 = getelementptr inbounds %Cmp_Node, ptr %t88, i32 0, i32 1 %t90 = load ptr, ptr %t89 call void @fn_emith(ptr %t90) - call void @fn_emith(ptr @.str407) + call void @fn_emith(ptr @.str410) %t91 = load ptr, ptr %t81 %t92 = getelementptr inbounds %Cmp_Node, ptr %t91, i32 0, i32 3 %t93 = load ptr, ptr %t92 %t94 = call ptr @fn_llty(ptr %t93) call void @fn_emith(ptr %t94) - call void @fn_emith(ptr @.str408) + call void @fn_emith(ptr @.str411) %t95 = load ptr, ptr %t81 %t96 = call ptr @fn_global_init(ptr %t95) call void @fn_emith(ptr %t96) - call void @fn_emith(ptr @.str409) + call void @fn_emith(ptr @.str412) br label %ifend20 ifend20: %t97 = load i32, ptr %t6 @@ -15189,20 +17048,20 @@ wbody1: %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %then3, label %ifend5 then3: - call void @fn_emith(ptr @.str410) + call void @fn_emith(ptr @.str413) %t21 = load ptr, ptr %t14 %t22 = getelementptr inbounds %Cmp_Node, ptr %t21, i32 0, i32 3 %t23 = load ptr, ptr %t22 %t24 = call ptr @fn_llty(ptr %t23) call void @fn_emith(ptr %t24) - call void @fn_emith(ptr @.str411) + call void @fn_emith(ptr @.str414) %t25 = load ptr, ptr %t14 %t26 = getelementptr inbounds %Cmp_Node, ptr %t25, i32 0, i32 4 %t27 = load ptr, ptr %t26 %t28 = getelementptr inbounds %Cmp_Node, ptr %t27, i32 0, i32 1 %t29 = load ptr, ptr %t28 call void @fn_emith(ptr %t29) - call void @fn_emith(ptr @.str412) + call void @fn_emith(ptr @.str415) store i32 0, ptr %t30 br label %wcond6 wcond6: @@ -15223,7 +17082,7 @@ wbody7: %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %then9, label %ifend11 then9: - call void @fn_emith(ptr @.str413) + call void @fn_emith(ptr @.str416) br label %ifend11 ifend11: %t44 = load ptr, ptr %t14 @@ -15243,7 +17102,7 @@ ifend11: store i32 %t56, ptr %t30 br label %wcond6 wend8: - call void @fn_emith(ptr @.str414) + call void @fn_emith(ptr @.str417) br label %ifend5 ifend5: %t57 = load i32, ptr %t0 @@ -15258,9 +17117,6 @@ ret: define void @fn_emit_str_prelude() { entry: - call void @fn_emith(ptr @.str415) - call void @fn_emith(ptr @.str416) - call void @fn_emith(ptr @.str417) call void @fn_emith(ptr @.str418) call void @fn_emith(ptr @.str419) call void @fn_emith(ptr @.str420) @@ -15293,6 +17149,9 @@ entry: call void @fn_emith(ptr @.str447) call void @fn_emith(ptr @.str448) call void @fn_emith(ptr @.str449) + call void @fn_emith(ptr @.str450) + call void @fn_emith(ptr @.str451) + call void @fn_emith(ptr @.str452) br label %ret ret: ret void @@ -15300,9 +17159,6 @@ ret: define void @fn_emit_int_str() { entry: - call void @fn_emith(ptr @.str450) - call void @fn_emith(ptr @.str451) - call void @fn_emith(ptr @.str452) call void @fn_emith(ptr @.str453) call void @fn_emith(ptr @.str454) call void @fn_emith(ptr @.str455) @@ -15317,6 +17173,9 @@ entry: call void @fn_emith(ptr @.str464) call void @fn_emith(ptr @.str465) call void @fn_emith(ptr @.str466) + call void @fn_emith(ptr @.str467) + call void @fn_emith(ptr @.str468) + call void @fn_emith(ptr @.str469) br label %ret ret: ret void @@ -15324,14 +17183,14 @@ ret: define void @fn_emit_str_slice() { entry: - call void @fn_emith(ptr @.str467) - call void @fn_emith(ptr @.str468) - call void @fn_emith(ptr @.str469) call void @fn_emith(ptr @.str470) call void @fn_emith(ptr @.str471) call void @fn_emith(ptr @.str472) call void @fn_emith(ptr @.str473) call void @fn_emith(ptr @.str474) + call void @fn_emith(ptr @.str475) + call void @fn_emith(ptr @.str476) + call void @fn_emith(ptr @.str477) br label %ret ret: ret void @@ -15365,7 +17224,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_str_concat(ptr @.str475, ptr %t17) + %t18 = call ptr @fn_str_concat(ptr @.str478, ptr %t17) call void @fn_perr(ptr %t18) br label %ifend2 ifend2: @@ -15384,7 +17243,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_str_concat(ptr @.str476, ptr %t31) + %t32 = call ptr @fn_str_concat(ptr @.str479, ptr %t31) call void @fn_perr(ptr %t32) br label %ifend5 ifend5: @@ -15396,25 +17255,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 @.str477) + call void @fn_emit(ptr @.str480) %t40 = load ptr, ptr %t39 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str478) + call void @fn_emit(ptr @.str481) %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 @.str479) + call void @fn_emit(ptr @.str482) %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 @.str480) + call void @fn_emit(ptr @.str483) %t48 = load i32, ptr %t24 %t49 = call ptr @fn_itoa(i32 %t48) call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str481) + call void @fn_emit(ptr @.str484) %t50 = load ptr, ptr %t39 store ptr %t50, ptr %retval br label %ret @@ -15461,22 +17320,22 @@ then0: %t18 = load ptr, ptr %t5 %t19 = getelementptr inbounds %Cmp_Val, ptr %t18, i32 0, i32 1 %t20 = load ptr, ptr %t19 - %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str482) + %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str485) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then3, label %ifend5 then3: %t23 = load ptr, ptr %t5 %t24 = getelementptr inbounds %Cmp_Val, ptr %t23, i32 0, i32 0 %t25 = load ptr, ptr %t24 - %t26 = call ptr @fn_str_concat(ptr @.str483, ptr %t25) - %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str484) + %t26 = call ptr @fn_str_concat(ptr @.str486, ptr %t25) + %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str487) %t28 = load ptr, ptr %t17 %t29 = getelementptr inbounds %Cmp_Val, ptr %t28, i32 0, i32 0 %t30 = load ptr, ptr %t29 %t31 = call ptr @fn_str_concat(ptr %t27, ptr %t30) %t32 = call ptr @fn_emit_bind(ptr %t31) store ptr %t32, ptr %t33 - store ptr @.str485, ptr @g_g_addr_ty + store ptr @.str488, ptr @g_g_addr_ty %t34 = load ptr, ptr %t33 store ptr %t34, ptr %retval br label %ret @@ -15484,22 +17343,22 @@ ifend5: %t35 = load ptr, ptr %t5 %t36 = getelementptr inbounds %Cmp_Val, ptr %t35, i32 0, i32 1 %t37 = load ptr, ptr %t36 - %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str486) + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str489) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then6, label %ifend8 then6: %t40 = load ptr, ptr %t5 %t41 = getelementptr inbounds %Cmp_Val, ptr %t40, i32 0, i32 0 %t42 = load ptr, ptr %t41 - %t43 = call ptr @fn_str_concat(ptr @.str487, ptr %t42) - %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str488) + %t43 = call ptr @fn_str_concat(ptr @.str490, ptr %t42) + %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str491) %t45 = load ptr, ptr %t17 %t46 = getelementptr inbounds %Cmp_Val, ptr %t45, i32 0, i32 0 %t47 = load ptr, ptr %t46 %t48 = call ptr @fn_str_concat(ptr %t44, ptr %t47) %t49 = call ptr @fn_emit_bind(ptr %t48) store ptr %t49, ptr %t50 - store ptr @.str489, ptr @g_g_addr_ty + store ptr @.str492, ptr @g_g_addr_ty %t51 = load ptr, ptr %t50 store ptr %t51, ptr %retval br label %ret @@ -15507,22 +17366,22 @@ ifend8: %t52 = load ptr, ptr %t5 %t53 = getelementptr inbounds %Cmp_Val, ptr %t52, i32 0, i32 1 %t54 = load ptr, ptr %t53 - %t55 = call i32 @fn_str_eq(ptr %t54, ptr @.str490) + %t55 = call i32 @fn_str_eq(ptr %t54, ptr @.str493) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then9, label %ifend11 then9: %t57 = load ptr, ptr %t5 %t58 = getelementptr inbounds %Cmp_Val, ptr %t57, i32 0, i32 0 %t59 = load ptr, ptr %t58 - %t60 = call ptr @fn_str_concat(ptr @.str491, ptr %t59) - %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str492) + %t60 = call ptr @fn_str_concat(ptr @.str494, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str495) %t62 = load ptr, ptr %t17 %t63 = getelementptr inbounds %Cmp_Val, ptr %t62, i32 0, i32 0 %t64 = load ptr, ptr %t63 %t65 = call ptr @fn_str_concat(ptr %t61, ptr %t64) %t66 = call ptr @fn_emit_bind(ptr %t65) store ptr %t66, ptr %t67 - store ptr @.str493, ptr @g_g_addr_ty + store ptr @.str496, ptr @g_g_addr_ty %t68 = load ptr, ptr %t67 store ptr %t68, ptr %retval br label %ret @@ -15530,15 +17389,15 @@ ifend11: %t69 = load ptr, ptr %t5 %t70 = getelementptr inbounds %Cmp_Val, ptr %t69, i32 0, i32 0 %t71 = load ptr, ptr %t70 - %t72 = call ptr @fn_str_concat(ptr @.str494, ptr %t71) - %t73 = call ptr @fn_str_concat(ptr %t72, ptr @.str495) + %t72 = call ptr @fn_str_concat(ptr @.str497, ptr %t71) + %t73 = call ptr @fn_str_concat(ptr %t72, ptr @.str498) %t74 = load ptr, ptr %t17 %t75 = getelementptr inbounds %Cmp_Val, ptr %t74, i32 0, i32 0 %t76 = load ptr, ptr %t75 %t77 = call ptr @fn_str_concat(ptr %t73, ptr %t76) %t78 = call ptr @fn_emit_bind(ptr %t77) store ptr %t78, ptr %t79 - store ptr @.str496, ptr @g_g_addr_ty + store ptr @.str499, ptr @g_g_addr_ty %t80 = load ptr, ptr %t79 store ptr %t80, ptr %retval br label %ret @@ -15552,24 +17411,24 @@ ifend2: store ptr %t86, ptr @g_g_addr_ty %t87 = call ptr @fn_nreg() store ptr %t87, ptr %t88 - call void @fn_emit(ptr @.str497) + call void @fn_emit(ptr @.str500) %t89 = load ptr, ptr %t88 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str498) + call void @fn_emit(ptr @.str501) %t90 = load ptr, ptr %t5 %t91 = getelementptr inbounds %Cmp_Val, ptr %t90, i32 0, i32 0 %t92 = load ptr, ptr %t91 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str499) + call void @fn_emit(ptr @.str502) %t93 = call ptr @fn_nreg() store ptr %t93, ptr %t94 - call void @fn_emit(ptr @.str500) + call void @fn_emit(ptr @.str503) %t95 = load ptr, ptr %t94 call void @fn_emit(ptr %t95) - call void @fn_emit(ptr @.str501) + call void @fn_emit(ptr @.str504) %t96 = load ptr, ptr %t88 call void @fn_emit(ptr %t96) - call void @fn_emit(ptr @.str502) + call void @fn_emit(ptr @.str505) %t97 = load ptr, ptr %t0 %t98 = getelementptr inbounds %Cmp_Node, ptr %t97, i32 0, i32 5 %t99 = load ptr, ptr %t98 @@ -15577,22 +17436,22 @@ ifend2: store ptr %t100, ptr %t101 %t102 = call ptr @fn_nreg() store ptr %t102, ptr %t103 - call void @fn_emit(ptr @.str503) + call void @fn_emit(ptr @.str506) %t104 = load ptr, ptr %t103 call void @fn_emit(ptr %t104) - call void @fn_emit(ptr @.str504) + call void @fn_emit(ptr @.str507) %t105 = load ptr, ptr %t85 %t106 = call ptr @fn_llty(ptr %t105) call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str505) + call void @fn_emit(ptr @.str508) %t107 = load ptr, ptr %t94 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str506) + call void @fn_emit(ptr @.str509) %t108 = load ptr, ptr %t101 %t109 = getelementptr inbounds %Cmp_Val, ptr %t108, i32 0, i32 0 %t110 = load ptr, ptr %t109 call void @fn_emit(ptr %t110) - call void @fn_emit(ptr @.str507) + call void @fn_emit(ptr @.str510) %t111 = load ptr, ptr %t103 store ptr %t111, ptr %retval br label %ret @@ -15615,7 +17474,7 @@ entry: %t72 = alloca i32 store ptr %arg_name, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str508) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str511) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: @@ -15623,14 +17482,14 @@ then0: br label %ret ifend2: %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str509) + %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str512) %t8 = icmp ne i32 %t7, 0 %t9 = zext i1 %t8 to i32 store i32 %t9, ptr %t5 br i1 %t8, label %scend4, label %sc3 sc3: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str510) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str513) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t5 @@ -15643,7 +17502,7 @@ scend4: br i1 %t15, label %scend6, label %sc5 sc5: %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str511) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str514) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t4 @@ -15657,14 +17516,14 @@ then7: br label %ret ifend9: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str512) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str515) %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_str_eq(ptr %t29, ptr @.str513) + %t30 = call i32 @fn_str_eq(ptr %t29, ptr @.str516) %t31 = icmp ne i32 %t30, 0 %t32 = zext i1 %t31 to i32 store i32 %t32, ptr %t24 @@ -15677,7 +17536,7 @@ scend11: br i1 %t34, label %scend13, label %sc12 sc12: %t36 = load ptr, ptr %t0 - %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str514) + %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str517) %t38 = icmp ne i32 %t37, 0 %t39 = zext i1 %t38 to i32 store i32 %t39, ptr %t23 @@ -15691,14 +17550,14 @@ then14: br label %ret ifend16: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str515) + %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str518) %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_str_eq(ptr %t48, ptr @.str516) + %t49 = call i32 @fn_str_eq(ptr %t48, ptr @.str519) %t50 = icmp ne i32 %t49, 0 %t51 = zext i1 %t50 to i32 store i32 %t51, ptr %t43 @@ -15711,7 +17570,7 @@ scend18: br i1 %t53, label %scend20, label %sc19 sc19: %t55 = load ptr, ptr %t0 - %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str517) + %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str520) %t57 = icmp ne i32 %t56, 0 %t58 = zext i1 %t57 to i32 store i32 %t58, ptr %t42 @@ -15725,14 +17584,14 @@ then21: br label %ret ifend23: %t62 = load ptr, ptr %t0 - %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str518) + %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str521) %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_str_eq(ptr %t66, ptr @.str519) + %t67 = call i32 @fn_str_eq(ptr %t66, ptr @.str522) %t68 = icmp ne i32 %t67, 0 %t69 = zext i1 %t68 to i32 store i32 %t69, ptr %t61 @@ -15746,14 +17605,14 @@ then26: br label %ret ifend28: %t73 = load ptr, ptr %t0 - %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str520) + %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str523) %t75 = icmp ne i32 %t74, 0 %t76 = zext i1 %t75 to i32 store i32 %t76, ptr %t72 br i1 %t75, label %scend30, label %sc29 sc29: %t77 = load ptr, ptr %t0 - %t78 = call i32 @fn_str_eq(ptr %t77, ptr @.str521) + %t78 = call i32 @fn_str_eq(ptr %t77, ptr @.str524) %t79 = icmp ne i32 %t78, 0 %t80 = zext i1 %t79 to i32 store i32 %t80, ptr %t72 @@ -15781,13 +17640,13 @@ entry: store ptr %arg_rest, ptr %t0 %t1 = call ptr @fn_nreg() store ptr %t1, ptr %t2 - call void @fn_emit(ptr @.str522) + call void @fn_emit(ptr @.str525) %t3 = load ptr, ptr %t2 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str523) + call void @fn_emit(ptr @.str526) %t4 = load ptr, ptr %t0 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str524) + call void @fn_emit(ptr @.str527) %t5 = load ptr, ptr %t2 store ptr %t5, ptr %retval br label %ret @@ -15858,7 +17717,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_str_eq(ptr %t2, ptr @.str525) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str528) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -15869,23 +17728,23 @@ then0: %t9 = call ptr @fn_arg_code(ptr %t8, i32 1) store ptr %t9, ptr %t10 %t11 = load ptr, ptr %t10 - %t12 = call ptr @fn_str_concat(ptr @.str526, ptr %t11) - %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str527) + %t12 = call ptr @fn_str_concat(ptr @.str529, ptr %t11) + %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str530) %t14 = call ptr @fn_emit_bind(ptr %t13) store ptr %t14, ptr %t15 %t16 = load ptr, ptr %t7 - %t17 = call ptr @fn_str_concat(ptr @.str528, ptr %t16) - %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str529) + %t17 = call ptr @fn_str_concat(ptr @.str531, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str532) %t19 = load ptr, ptr %t15 %t20 = call ptr @fn_str_concat(ptr %t18, ptr %t19) - %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str530) + %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str533) %t22 = call ptr @fn_emit_bind(ptr %t21) - %t23 = call ptr @fn_val(ptr %t22, ptr @.str531) + %t23 = call ptr @fn_val(ptr %t22, ptr @.str534) store ptr %t23, ptr %retval br label %ret ifend2: %t24 = load ptr, ptr %t0 - %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str532) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str535) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then3, label %ifend5 then3: @@ -15896,25 +17755,25 @@ then3: %t31 = call ptr @fn_arg_code(ptr %t30, i32 1) store ptr %t31, ptr %t32 %t33 = load ptr, ptr %t29 - %t34 = call ptr @fn_str_concat(ptr @.str533, ptr %t33) - %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str534) + %t34 = call ptr @fn_str_concat(ptr @.str536, ptr %t33) + %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str537) %t36 = load ptr, ptr %t32 %t37 = call ptr @fn_str_concat(ptr %t35, ptr %t36) - %t38 = call ptr @fn_str_concat(ptr %t37, ptr @.str535) + %t38 = call ptr @fn_str_concat(ptr %t37, ptr @.str538) %t39 = call ptr @fn_emit_bind(ptr %t38) - %t40 = call ptr @fn_val(ptr %t39, ptr @.str536) + %t40 = call ptr @fn_val(ptr %t39, ptr @.str539) store ptr %t40, ptr %retval br label %ret ifend5: %t42 = load ptr, ptr %t0 - %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str537) + %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str540) %t44 = icmp ne i32 %t43, 0 %t45 = zext i1 %t44 to i32 store i32 %t45, ptr %t41 br i1 %t44, label %scend7, label %sc6 sc6: %t46 = load ptr, ptr %t0 - %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str538) + %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str541) %t48 = icmp ne i32 %t47, 0 %t49 = zext i1 %t48 to i32 store i32 %t49, ptr %t41 @@ -15934,43 +17793,43 @@ then8: %t59 = call ptr @fn_arg_code(ptr %t58, i32 2) store ptr %t59, ptr %t60 %t61 = load ptr, ptr %t60 - %t62 = call ptr @fn_str_concat(ptr @.str539, ptr %t61) - %t63 = call ptr @fn_str_concat(ptr %t62, ptr @.str540) + %t62 = call ptr @fn_str_concat(ptr @.str542, ptr %t61) + %t63 = call ptr @fn_str_concat(ptr %t62, ptr @.str543) %t64 = call ptr @fn_emit_bind(ptr %t63) store ptr %t64, ptr %t65 - store ptr @.str541, ptr %t66 + store ptr @.str544, ptr %t66 %t67 = load ptr, ptr %t0 - %t68 = call i32 @fn_str_eq(ptr %t67, ptr @.str542) + %t68 = call i32 @fn_str_eq(ptr %t67, ptr @.str545) %t69 = icmp ne i32 %t68, 0 br i1 %t69, label %then11, label %ifend13 then11: - store ptr @.str543, ptr %t66 + store ptr @.str546, ptr %t66 br label %ifend13 ifend13: %t70 = load ptr, ptr %t66 - %t71 = call ptr @fn_str_concat(ptr @.str544, ptr %t70) - %t72 = call ptr @fn_str_concat(ptr %t71, ptr @.str545) + %t71 = call ptr @fn_str_concat(ptr @.str547, ptr %t70) + %t72 = call ptr @fn_str_concat(ptr %t71, ptr @.str548) %t73 = load ptr, ptr %t57 %t74 = call ptr @fn_str_concat(ptr %t72, ptr %t73) - %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str546) + %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str549) %t76 = load ptr, ptr %t65 %t77 = call ptr @fn_str_concat(ptr %t75, ptr %t76) - %t78 = call ptr @fn_str_concat(ptr %t77, ptr @.str547) + %t78 = call ptr @fn_str_concat(ptr %t77, ptr @.str550) %t79 = load ptr, ptr %t54 %t80 = call ptr @fn_str_concat(ptr %t78, ptr %t79) - %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str548) + %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str551) %t82 = call ptr @fn_emit_bind(ptr %t81) store ptr %t82, ptr %t83 %t84 = load ptr, ptr %t83 - %t85 = call ptr @fn_str_concat(ptr @.str549, ptr %t84) - %t86 = call ptr @fn_str_concat(ptr %t85, ptr @.str550) + %t85 = call ptr @fn_str_concat(ptr @.str552, ptr %t84) + %t86 = call ptr @fn_str_concat(ptr %t85, ptr @.str553) %t87 = call ptr @fn_emit_bind(ptr %t86) - %t88 = call ptr @fn_val(ptr %t87, ptr @.str551) + %t88 = call ptr @fn_val(ptr %t87, ptr @.str554) store ptr %t88, ptr %retval br label %ret ifend10: %t89 = load ptr, ptr %t0 - %t90 = call i32 @fn_str_eq(ptr %t89, ptr @.str552) + %t90 = call i32 @fn_str_eq(ptr %t89, ptr @.str555) %t91 = icmp ne i32 %t90, 0 br i1 %t91, label %then14, label %ifend16 then14: @@ -15984,26 +17843,26 @@ then14: %t99 = call ptr @fn_arg_code(ptr %t98, i32 2) store ptr %t99, ptr %t100 %t101 = load ptr, ptr %t97 - %t102 = call ptr @fn_str_concat(ptr @.str553, ptr %t101) - %t103 = call ptr @fn_str_concat(ptr %t102, ptr @.str554) + %t102 = call ptr @fn_str_concat(ptr @.str556, ptr %t101) + %t103 = call ptr @fn_str_concat(ptr %t102, ptr @.str557) %t104 = call ptr @fn_emit_bind(ptr %t103) store ptr %t104, ptr %t105 %t106 = load ptr, ptr %t94 - %t107 = call ptr @fn_str_concat(ptr @.str555, ptr %t106) - %t108 = call ptr @fn_str_concat(ptr %t107, ptr @.str556) + %t107 = call ptr @fn_str_concat(ptr @.str558, ptr %t106) + %t108 = call ptr @fn_str_concat(ptr %t107, ptr @.str559) %t109 = load ptr, ptr %t105 %t110 = call ptr @fn_str_concat(ptr %t108, ptr %t109) - %t111 = call ptr @fn_str_concat(ptr %t110, ptr @.str557) + %t111 = call ptr @fn_str_concat(ptr %t110, ptr @.str560) %t112 = load ptr, ptr %t100 %t113 = call ptr @fn_str_concat(ptr %t111, ptr %t112) - %t114 = call ptr @fn_str_concat(ptr %t113, ptr @.str558) + %t114 = call ptr @fn_str_concat(ptr %t113, ptr @.str561) %t115 = call ptr @fn_emit_bind(ptr %t114) - %t116 = call ptr @fn_val(ptr %t115, ptr @.str559) + %t116 = call ptr @fn_val(ptr %t115, ptr @.str562) store ptr %t116, ptr %retval br label %ret ifend16: %t117 = load ptr, ptr %t0 - %t118 = call i32 @fn_str_eq(ptr %t117, ptr @.str560) + %t118 = call i32 @fn_str_eq(ptr %t117, ptr @.str563) %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %then17, label %ifend19 then17: @@ -16011,108 +17870,108 @@ then17: %t121 = call ptr @fn_arg_code(ptr %t120, i32 0) store ptr %t121, ptr %t122 %t123 = load ptr, ptr %t122 - %t124 = call ptr @fn_str_concat(ptr @.str561, ptr %t123) - %t125 = call ptr @fn_str_concat(ptr %t124, ptr @.str562) + %t124 = call ptr @fn_str_concat(ptr @.str564, ptr %t123) + %t125 = call ptr @fn_str_concat(ptr %t124, ptr @.str565) %t126 = call ptr @fn_emit_bind(ptr %t125) store ptr %t126, ptr %t127 %t128 = load ptr, ptr %t127 - %t129 = call ptr @fn_str_concat(ptr @.str563, ptr %t128) - %t130 = call ptr @fn_str_concat(ptr %t129, ptr @.str564) + %t129 = call ptr @fn_str_concat(ptr @.str566, ptr %t128) + %t130 = call ptr @fn_str_concat(ptr %t129, ptr @.str567) %t131 = call ptr @fn_emit_bind(ptr %t130) - %t132 = call ptr @fn_val(ptr %t131, ptr @.str565) + %t132 = call ptr @fn_val(ptr %t131, ptr @.str568) store ptr %t132, ptr %retval br label %ret ifend19: %t133 = load ptr, ptr %t0 - %t134 = call i32 @fn_str_eq(ptr %t133, ptr @.str566) + %t134 = call i32 @fn_str_eq(ptr %t133, ptr @.str569) %t135 = icmp ne i32 %t134, 0 br i1 %t135, label %then20, label %ifend22 then20: %t136 = load ptr, ptr %t1 %t137 = call ptr @fn_arg_code(ptr %t136, i32 0) store ptr %t137, ptr %t138 - call void @fn_emit(ptr @.str567) + call void @fn_emit(ptr @.str570) %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str568) - %t140 = call ptr @fn_val(ptr @.str569, ptr @.str570) + call void @fn_emit(ptr @.str571) + %t140 = call ptr @fn_val(ptr @.str572, ptr @.str573) store ptr %t140, ptr %retval br label %ret ifend22: %t141 = load ptr, ptr %t0 - %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str571) + %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str574) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then23, label %ifend25 then23: - %t144 = call ptr @fn_emit_bind(ptr @.str572) - %t145 = call ptr @fn_val(ptr %t144, ptr @.str573) + %t144 = call ptr @fn_emit_bind(ptr @.str575) + %t145 = call ptr @fn_val(ptr %t144, ptr @.str576) store ptr %t145, ptr %retval br label %ret ifend25: %t146 = load ptr, ptr %t0 - %t147 = call i32 @fn_str_eq(ptr %t146, ptr @.str574) + %t147 = call i32 @fn_str_eq(ptr %t146, ptr @.str577) %t148 = icmp ne i32 %t147, 0 br i1 %t148, label %then26, label %ifend28 then26: %t149 = load ptr, ptr %t1 %t150 = call ptr @fn_arg_code(ptr %t149, i32 0) store ptr %t150, ptr %t151 - %t152 = call ptr @fn_emit_bind(ptr @.str575) + %t152 = call ptr @fn_emit_bind(ptr @.str578) store ptr %t152, ptr %t153 %t154 = load ptr, ptr %t153 - %t155 = call ptr @fn_str_concat(ptr @.str576, ptr %t154) - %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str577) + %t155 = call ptr @fn_str_concat(ptr @.str579, ptr %t154) + %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str580) %t157 = load ptr, ptr %t151 %t158 = call ptr @fn_str_concat(ptr %t156, ptr %t157) %t159 = call ptr @fn_emit_bind(ptr %t158) store ptr %t159, ptr %t160 %t161 = load ptr, ptr %t160 - %t162 = call ptr @fn_str_concat(ptr @.str578, ptr %t161) + %t162 = call ptr @fn_str_concat(ptr @.str581, ptr %t161) %t163 = call ptr @fn_emit_bind(ptr %t162) - %t164 = call ptr @fn_val(ptr %t163, ptr @.str579) + %t164 = call ptr @fn_val(ptr %t163, ptr @.str582) store ptr %t164, ptr %retval br label %ret ifend28: %t165 = load ptr, ptr %t0 - %t166 = call i32 @fn_str_eq(ptr %t165, ptr @.str580) + %t166 = call i32 @fn_str_eq(ptr %t165, ptr @.str583) %t167 = icmp ne i32 %t166, 0 br i1 %t167, label %then29, label %ifend31 then29: %t168 = load ptr, ptr %t1 %t169 = call ptr @fn_arg_code(ptr %t168, i32 0) store ptr %t169, ptr %t170 - call void @fn_emit(ptr @.str581) + call void @fn_emit(ptr @.str584) %t171 = load ptr, ptr %t170 call void @fn_emit(ptr %t171) - call void @fn_emit(ptr @.str582) - call void @fn_emit(ptr @.str583) + call void @fn_emit(ptr @.str585) + call void @fn_emit(ptr @.str586) store i32 1, ptr @g_g_term - %t172 = call ptr @fn_val(ptr @.str584, ptr @.str585) + %t172 = call ptr @fn_val(ptr @.str587, ptr @.str588) store ptr %t172, ptr %retval br label %ret ifend31: %t173 = load ptr, ptr %t0 - %t174 = call i32 @fn_str_eq(ptr %t173, ptr @.str586) + %t174 = call i32 @fn_str_eq(ptr %t173, ptr @.str589) %t175 = icmp ne i32 %t174, 0 br i1 %t175, label %then32, label %ifend34 then32: - %t176 = call ptr @fn_emit_bind(ptr @.str587) - %t177 = call ptr @fn_val(ptr %t176, ptr @.str588) + %t176 = call ptr @fn_emit_bind(ptr @.str590) + %t177 = call ptr @fn_val(ptr %t176, ptr @.str591) store ptr %t177, ptr %retval br label %ret ifend34: %t178 = load ptr, ptr %t0 - %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str589) + %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str592) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then35, label %ifend37 then35: - %t181 = call ptr @fn_emit_bind(ptr @.str590) - %t182 = call ptr @fn_val(ptr %t181, ptr @.str591) + %t181 = call ptr @fn_emit_bind(ptr @.str593) + %t182 = call ptr @fn_val(ptr %t181, ptr @.str594) store ptr %t182, ptr %retval br label %ret ifend37: %t183 = load ptr, ptr %t0 - %t184 = call i32 @fn_str_eq(ptr %t183, ptr @.str592) + %t184 = call i32 @fn_str_eq(ptr %t183, ptr @.str595) %t185 = icmp ne i32 %t184, 0 br i1 %t185, label %then38, label %ifend40 then38: @@ -16120,15 +17979,15 @@ then38: %t187 = call ptr @fn_arg_code(ptr %t186, i32 0) store ptr %t187, ptr %t188 %t189 = load ptr, ptr %t188 - %t190 = call ptr @fn_str_concat(ptr @.str593, ptr %t189) - %t191 = call ptr @fn_str_concat(ptr %t190, ptr @.str594) + %t190 = call ptr @fn_str_concat(ptr @.str596, ptr %t189) + %t191 = call ptr @fn_str_concat(ptr %t190, ptr @.str597) %t192 = call ptr @fn_emit_bind(ptr %t191) - %t193 = call ptr @fn_val(ptr %t192, ptr @.str595) + %t193 = call ptr @fn_val(ptr %t192, ptr @.str598) store ptr %t193, ptr %retval br label %ret ifend40: %t194 = load ptr, ptr %t0 - %t195 = call i32 @fn_str_eq(ptr %t194, ptr @.str596) + %t195 = call i32 @fn_str_eq(ptr %t194, ptr @.str599) %t196 = icmp ne i32 %t195, 0 br i1 %t196, label %then41, label %ifend43 then41: @@ -16136,15 +17995,15 @@ then41: %t198 = call ptr @fn_arg_code(ptr %t197, i32 0) store ptr %t198, ptr %t199 %t200 = load ptr, ptr %t199 - %t201 = call ptr @fn_str_concat(ptr @.str597, ptr %t200) - %t202 = call ptr @fn_str_concat(ptr %t201, ptr @.str598) + %t201 = call ptr @fn_str_concat(ptr @.str600, ptr %t200) + %t202 = call ptr @fn_str_concat(ptr %t201, ptr @.str601) %t203 = call ptr @fn_emit_bind(ptr %t202) - %t204 = call ptr @fn_val(ptr %t203, ptr @.str599) + %t204 = call ptr @fn_val(ptr %t203, ptr @.str602) store ptr %t204, ptr %retval br label %ret ifend43: store i32 0, ptr @g_g_intrin_ok - %t205 = call ptr @fn_val(ptr @.str600, ptr @.str601) + %t205 = call ptr @fn_val(ptr @.str603, ptr @.str604) store ptr %t205, ptr %retval br label %ret ret: @@ -16165,14 +18024,14 @@ entry: %t64 = alloca i32 store ptr %arg_name, ptr %t0 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str602) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str605) %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_str_eq(ptr %t6, ptr @.str603) + %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str606) %t8 = icmp ne i32 %t7, 0 %t9 = zext i1 %t8 to i32 store i32 %t9, ptr %t1 @@ -16186,14 +18045,14 @@ then2: br label %ret ifend4: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str604) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str607) %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_str_eq(ptr %t17, ptr @.str605) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str608) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t12 @@ -16207,14 +18066,14 @@ then7: br label %ret ifend9: %t24 = load ptr, ptr %t0 - %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str606) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str609) %t26 = icmp ne i32 %t25, 0 %t27 = zext i1 %t26 to i32 store i32 %t27, ptr %t23 br i1 %t26, label %scend11, label %sc10 sc10: %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str607) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str610) %t30 = icmp ne i32 %t29, 0 %t31 = zext i1 %t30 to i32 store i32 %t31, ptr %t23 @@ -16228,14 +18087,14 @@ then12: br label %ret ifend14: %t35 = load ptr, ptr %t0 - %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str608) + %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str611) %t37 = icmp ne i32 %t36, 0 %t38 = zext i1 %t37 to i32 store i32 %t38, ptr %t34 br i1 %t37, label %scend16, label %sc15 sc15: %t39 = load ptr, ptr %t0 - %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str609) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str612) %t41 = icmp ne i32 %t40, 0 %t42 = zext i1 %t41 to i32 store i32 %t42, ptr %t34 @@ -16249,14 +18108,14 @@ then17: br label %ret ifend19: %t47 = load ptr, ptr %t0 - %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str610) + %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str613) %t49 = icmp ne i32 %t48, 0 %t50 = zext i1 %t49 to i32 store i32 %t50, ptr %t46 br i1 %t49, label %scend21, label %sc20 sc20: %t51 = load ptr, ptr %t0 - %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str611) + %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str614) %t53 = icmp ne i32 %t52, 0 %t54 = zext i1 %t53 to i32 store i32 %t54, ptr %t46 @@ -16269,7 +18128,7 @@ scend21: br i1 %t56, label %scend23, label %sc22 sc22: %t58 = load ptr, ptr %t0 - %t59 = call i32 @fn_str_eq(ptr %t58, ptr @.str612) + %t59 = call i32 @fn_str_eq(ptr %t58, ptr @.str615) %t60 = icmp ne i32 %t59, 0 %t61 = zext i1 %t60 to i32 store i32 %t61, ptr %t45 @@ -16283,14 +18142,14 @@ then24: br label %ret ifend26: %t65 = load ptr, ptr %t0 - %t66 = call i32 @fn_str_eq(ptr %t65, ptr @.str613) + %t66 = call i32 @fn_str_eq(ptr %t65, ptr @.str616) %t67 = icmp ne i32 %t66, 0 %t68 = zext i1 %t67 to i32 store i32 %t68, ptr %t64 br i1 %t67, label %scend28, label %sc27 sc27: %t69 = load ptr, ptr %t0 - %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str614) + %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str617) %t71 = icmp ne i32 %t70, 0 %t72 = zext i1 %t71 to i32 store i32 %t72, ptr %t64 @@ -16335,23 +18194,23 @@ entry: store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str615) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str618) %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 @.str616) + call void @fn_emit(ptr @.str619) %t8 = load ptr, ptr %t7 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str617) - %t9 = call ptr @fn_val(ptr @.str618, ptr @.str619) + call void @fn_emit(ptr @.str620) + %t9 = call ptr @fn_val(ptr @.str621, ptr @.str622) store ptr %t9, ptr %retval br label %ret ifend2: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str620) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str623) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3, label %ifend5 then3: @@ -16365,26 +18224,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_str_concat(ptr @.str621, ptr %t22) - %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str622) + %t23 = call ptr @fn_str_concat(ptr @.str624, ptr %t22) + %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str625) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str623) + call void @fn_emit(ptr @.str626) %t27 = load ptr, ptr %t15 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str624) + call void @fn_emit(ptr @.str627) %t28 = load ptr, ptr %t18 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str625) + call void @fn_emit(ptr @.str628) %t29 = load ptr, ptr %t26 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str626) - %t30 = call ptr @fn_val(ptr @.str627, ptr @.str628) + call void @fn_emit(ptr @.str629) + %t30 = call ptr @fn_val(ptr @.str630, ptr @.str631) store ptr %t30, ptr %retval br label %ret ifend5: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str629) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str632) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then6, label %ifend8 then6: @@ -16396,33 +18255,33 @@ then6: store ptr %t38, ptr %t39 %t40 = call ptr @fn_nreg() store ptr %t40, ptr %t41 - call void @fn_emit(ptr @.str630) + call void @fn_emit(ptr @.str633) %t42 = load ptr, ptr %t41 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str631) + call void @fn_emit(ptr @.str634) %t43 = load ptr, ptr %t36 call void @fn_emit(ptr %t43) - call void @fn_emit(ptr @.str632) + call void @fn_emit(ptr @.str635) %t44 = load ptr, ptr %t39 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str633) + call void @fn_emit(ptr @.str636) %t45 = load ptr, ptr %t41 - %t46 = call ptr @fn_val(ptr %t45, ptr @.str634) + %t46 = call ptr @fn_val(ptr %t45, ptr @.str637) store ptr %t46, ptr %retval br label %ret ifend8: %t47 = load ptr, ptr %t0 - %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str635) + %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str638) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then9, label %ifend11 then9: - %t50 = call ptr @fn_emit_bind(ptr @.str636) - %t51 = call ptr @fn_val(ptr %t50, ptr @.str637) + %t50 = call ptr @fn_emit_bind(ptr @.str639) + %t51 = call ptr @fn_val(ptr %t50, ptr @.str640) store ptr %t51, ptr %retval br label %ret ifend11: %t52 = load ptr, ptr %t0 - %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str638) + %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str641) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then12, label %ifend14 then12: @@ -16438,12 +18297,12 @@ then12: %t64 = load ptr, ptr %t63 %t65 = getelementptr inbounds %Cmp_Val, ptr %t64, i32 0, i32 0 %t66 = load ptr, ptr %t65 - %t67 = call ptr @fn_val(ptr %t66, ptr @.str639) + %t67 = call ptr @fn_val(ptr %t66, ptr @.str642) store ptr %t67, ptr %retval br label %ret ifend14: %t68 = load ptr, ptr %t0 - %t69 = call i32 @fn_str_eq(ptr %t68, ptr @.str640) + %t69 = call i32 @fn_str_eq(ptr %t68, ptr @.str643) %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then15, label %ifend17 then15: @@ -16459,12 +18318,12 @@ then15: %t80 = load ptr, ptr %t79 %t81 = getelementptr inbounds %Cmp_Val, ptr %t80, i32 0, i32 0 %t82 = load ptr, ptr %t81 - %t83 = call ptr @fn_val(ptr %t82, ptr @.str641) + %t83 = call ptr @fn_val(ptr %t82, ptr @.str644) store ptr %t83, ptr %retval br label %ret ifend17: %t84 = load ptr, ptr %t0 - %t85 = call i32 @fn_str_eq(ptr %t84, ptr @.str642) + %t85 = call i32 @fn_str_eq(ptr %t84, ptr @.str645) %t86 = icmp ne i32 %t85, 0 br i1 %t86, label %then18, label %ifend20 then18: @@ -16472,45 +18331,45 @@ then18: %t88 = icmp ne i32 %t87, 0 br i1 %t88, label %then21, label %ifend23 then21: - %t89 = call ptr @fn_val(ptr @.str643, ptr @.str644) + %t89 = call ptr @fn_val(ptr @.str646, ptr @.str647) store ptr %t89, ptr %retval br label %ret ifend23: - %t90 = call ptr @fn_val(ptr @.str645, ptr @.str646) + %t90 = call ptr @fn_val(ptr @.str648, ptr @.str649) store ptr %t90, ptr %retval br label %ret ifend20: %t91 = load ptr, ptr %t0 - %t92 = call i32 @fn_str_eq(ptr %t91, ptr @.str647) + %t92 = call i32 @fn_str_eq(ptr %t91, ptr @.str650) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then24, label %ifend26 then24: - %t94 = call ptr @fn_val(ptr @.str648, ptr @.str649) + %t94 = call ptr @fn_val(ptr @.str651, ptr @.str652) store ptr %t94, ptr %retval br label %ret ifend26: %t95 = load ptr, ptr %t0 - %t96 = call i32 @fn_str_eq(ptr %t95, ptr @.str650) + %t96 = call i32 @fn_str_eq(ptr %t95, ptr @.str653) %t97 = icmp ne i32 %t96, 0 br i1 %t97, label %then27, label %ifend29 then27: - %t98 = call ptr @fn_emit_bind(ptr @.str651) - %t99 = call ptr @fn_val(ptr %t98, ptr @.str652) + %t98 = call ptr @fn_emit_bind(ptr @.str654) + %t99 = call ptr @fn_val(ptr %t98, ptr @.str655) store ptr %t99, ptr %retval br label %ret ifend29: %t100 = load ptr, ptr %t0 - %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str653) + %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str656) %t102 = icmp ne i32 %t101, 0 br i1 %t102, label %then30, label %ifend32 then30: - %t103 = call ptr @fn_emit_bind(ptr @.str654) - %t104 = call ptr @fn_val(ptr %t103, ptr @.str655) + %t103 = call ptr @fn_emit_bind(ptr @.str657) + %t104 = call ptr @fn_val(ptr %t103, ptr @.str658) store ptr %t104, ptr %retval br label %ret ifend32: %t105 = load ptr, ptr %t0 - %t106 = call i32 @fn_str_eq(ptr %t105, ptr @.str656) + %t106 = call i32 @fn_str_eq(ptr %t105, ptr @.str659) %t107 = icmp ne i32 %t106, 0 br i1 %t107, label %then33, label %ifend35 then33: @@ -16526,25 +18385,25 @@ then33: %t117 = load ptr, ptr %t1 %t118 = call ptr @fn_arg_code(ptr %t117, i32 3) store ptr %t118, ptr %t119 - call void @fn_emit(ptr @.str657) + call void @fn_emit(ptr @.str660) %t120 = load ptr, ptr %t110 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str658) + call void @fn_emit(ptr @.str661) %t121 = load ptr, ptr %t113 call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str659) + call void @fn_emit(ptr @.str662) %t122 = load ptr, ptr %t116 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str660) + call void @fn_emit(ptr @.str663) %t123 = load ptr, ptr %t119 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str661) - %t124 = call ptr @fn_val(ptr @.str662, ptr @.str663) + call void @fn_emit(ptr @.str664) + %t124 = call ptr @fn_val(ptr @.str665, ptr @.str666) store ptr %t124, ptr %retval br label %ret ifend35: %t125 = load ptr, ptr %t0 - %t126 = call i32 @fn_str_eq(ptr %t125, ptr @.str664) + %t126 = call i32 @fn_str_eq(ptr %t125, ptr @.str667) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then36, label %ifend38 then36: @@ -16557,31 +18416,31 @@ then36: %t134 = load ptr, ptr %t1 %t135 = call ptr @fn_arg_code(ptr %t134, i32 2) store ptr %t135, ptr %t136 - call void @fn_emit(ptr @.str665) + call void @fn_emit(ptr @.str668) %t137 = load ptr, ptr %t130 call void @fn_emit(ptr %t137) - call void @fn_emit(ptr @.str666) + call void @fn_emit(ptr @.str669) %t138 = load ptr, ptr %t133 call void @fn_emit(ptr %t138) - call void @fn_emit(ptr @.str667) + call void @fn_emit(ptr @.str670) %t139 = load ptr, ptr %t136 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str668) - %t140 = call ptr @fn_val(ptr @.str669, ptr @.str670) + call void @fn_emit(ptr @.str671) + %t140 = call ptr @fn_val(ptr @.str672, ptr @.str673) store ptr %t140, ptr %retval br label %ret ifend38: %t141 = load ptr, ptr %t0 - %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str671) + %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str674) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then39, label %ifend41 then39: - call void @fn_emit(ptr @.str672) - %t144 = call ptr @fn_val(ptr @.str673, ptr @.str674) + call void @fn_emit(ptr @.str675) + %t144 = call ptr @fn_val(ptr @.str676, ptr @.str677) store ptr %t144, ptr %retval br label %ret ifend41: - %t145 = call ptr @fn_val(ptr @.str675, ptr @.str676) + %t145 = call ptr @fn_val(ptr @.str678, ptr @.str679) store ptr %t145, ptr %retval br label %ret ret: @@ -16598,14 +18457,14 @@ entry: %t3 = alloca i32 store ptr %arg_name, ptr %t0 %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str677) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str680) %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_str_eq(ptr %t8, ptr @.str678) + %t9 = call i32 @fn_str_eq(ptr %t8, ptr @.str681) %t10 = icmp ne i32 %t9, 0 %t11 = zext i1 %t10 to i32 store i32 %t11, ptr %t3 @@ -16618,7 +18477,7 @@ scend1: br i1 %t13, label %scend3, label %sc2 sc2: %t15 = load ptr, ptr %t0 - %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str679) + %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str682) %t17 = icmp ne i32 %t16, 0 %t18 = zext i1 %t17 to i32 store i32 %t18, ptr %t2 @@ -16631,7 +18490,7 @@ scend3: br i1 %t20, label %scend5, label %sc4 sc4: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str680) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str683) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t1 @@ -16653,21 +18512,21 @@ entry: %t13 = alloca ptr %t20 = alloca ptr %t26 = alloca ptr - %t39 = alloca i32 - %t58 = alloca ptr - %t67 = alloca ptr - %t68 = alloca ptr - %t85 = alloca ptr - %t108 = alloca ptr - %t117 = alloca ptr - %t126 = alloca ptr - %t137 = alloca ptr - %t151 = alloca ptr - %t160 = alloca ptr + %t42 = alloca i32 + %t61 = alloca ptr + %t70 = alloca ptr + %t71 = alloca ptr + %t88 = alloca ptr + %t114 = alloca ptr + %t123 = alloca ptr + %t132 = alloca ptr + %t143 = alloca ptr + %t157 = alloca ptr + %t166 = alloca ptr store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str681) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str684) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -16683,55 +18542,6163 @@ 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_str_concat(ptr @.str682, ptr %t16) - %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str683) + %t17 = call ptr @fn_str_concat(ptr @.str685, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str686) %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_str_concat(ptr @.str684, ptr %t23) + %t24 = call ptr @fn_str_concat(ptr @.str687, ptr %t23) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 %t27 = load ptr, ptr %t20 - %t28 = call ptr @fn_str_concat(ptr @.str685, ptr %t27) - %t29 = call ptr @fn_str_concat(ptr %t28, ptr @.str686) + %t28 = call ptr @fn_str_concat(ptr @.str688, ptr %t27) + %t29 = call ptr @fn_str_concat(ptr %t28, ptr @.str689) %t30 = load ptr, ptr %t26 %t31 = call ptr @fn_str_concat(ptr %t29, ptr %t30) - %t32 = call ptr @fn_str_concat(ptr %t31, ptr @.str687) + %t32 = call ptr @fn_str_concat(ptr %t31, ptr @.str690) %t33 = load ptr, ptr %t13 %t34 = getelementptr inbounds %Cmp_Val, ptr %t33, i32 0, i32 0 %t35 = load ptr, ptr %t34 %t36 = call ptr @fn_str_concat(ptr %t32, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) - %t38 = call ptr @fn_val(ptr %t37, ptr @.str688) - store ptr %t38, ptr %retval + %t38 = load ptr, ptr %t13 + %t39 = getelementptr inbounds %Cmp_Val, ptr %t38, i32 0, i32 1 + %t40 = load ptr, ptr %t39 + %t41 = call ptr @fn_val(ptr %t37, ptr %t40) + store ptr %t41, ptr %retval br label %ret ifend2: - %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str689) - %t42 = icmp ne i32 %t41, 0 - %t43 = zext i1 %t42 to i32 - store i32 %t43, ptr %t39 - br i1 %t42, label %scend4, label %sc3 + %t43 = load ptr, ptr %t0 + %t44 = call i32 @fn_str_eq(ptr %t43, ptr @.str691) + %t45 = icmp ne i32 %t44, 0 + %t46 = zext i1 %t45 to i32 + store i32 %t46, ptr %t42 + br i1 %t45, label %scend4, label %sc3 sc3: - %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str690) - %t46 = icmp ne i32 %t45, 0 - %t47 = zext i1 %t46 to i32 - store i32 %t47, ptr %t39 + %t47 = load ptr, ptr %t0 + %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str692) + %t49 = icmp ne i32 %t48, 0 + %t50 = zext i1 %t49 to i32 + store i32 %t50, ptr %t42 br label %scend4 scend4: - %t48 = load i32, ptr %t39 - %t49 = icmp ne i32 %t48, 0 - br i1 %t49, label %then5, label %ifend7 + %t51 = load i32, ptr %t42 + %t52 = icmp ne i32 %t51, 0 + br i1 %t52, label %then5, label %ifend7 then5: + %t53 = load ptr, ptr %t1 + %t54 = getelementptr inbounds %Cmp_Node, ptr %t53, i32 0, i32 7 + %t55 = load ptr, ptr %t54 + %t56 = getelementptr inbounds %LSlice, ptr %t55, i32 0, i32 0 + %t57 = load ptr, ptr %t56 + %t58 = getelementptr inbounds ptr, ptr %t57, i32 0 + %t59 = load ptr, ptr %t58 + %t60 = call ptr @fn_emit_expr(ptr %t59) + store ptr %t60, ptr %t61 + %t62 = load ptr, ptr %t1 + %t63 = getelementptr inbounds %Cmp_Node, ptr %t62, i32 0, i32 7 + %t64 = load ptr, ptr %t63 + %t65 = getelementptr inbounds %LSlice, ptr %t64, i32 0, i32 0 + %t66 = load ptr, ptr %t65 + %t67 = getelementptr inbounds ptr, ptr %t66, i32 1 + %t68 = load ptr, ptr %t67 + %t69 = call ptr @fn_emit_expr(ptr %t68) + store ptr %t69, ptr %t70 + store ptr @.str693, ptr %t71 + %t72 = load ptr, ptr %t0 + %t73 = call i32 @fn_str_eq(ptr %t72, ptr @.str694) + %t74 = icmp ne i32 %t73, 0 + br i1 %t74, label %then8, label %ifend10 +then8: + store ptr @.str695, ptr %t71 + br label %ifend10 +ifend10: + %t75 = load ptr, ptr %t71 + %t76 = call ptr @fn_str_concat(ptr @.str696, ptr %t75) + %t77 = call ptr @fn_str_concat(ptr %t76, ptr @.str697) + %t78 = load ptr, ptr %t61 + %t79 = getelementptr inbounds %Cmp_Val, ptr %t78, i32 0, i32 0 + %t80 = load ptr, ptr %t79 + %t81 = call ptr @fn_str_concat(ptr %t77, ptr %t80) + %t82 = call ptr @fn_str_concat(ptr %t81, ptr @.str698) + %t83 = load ptr, ptr %t70 + %t84 = getelementptr inbounds %Cmp_Val, ptr %t83, i32 0, i32 0 + %t85 = load ptr, ptr %t84 + %t86 = call ptr @fn_str_concat(ptr %t82, ptr %t85) + %t87 = call ptr @fn_emit_bind(ptr %t86) + store ptr %t87, ptr %t88 + %t89 = load ptr, ptr %t88 + %t90 = call ptr @fn_str_concat(ptr @.str699, ptr %t89) + %t91 = call ptr @fn_str_concat(ptr %t90, ptr @.str700) + %t92 = load ptr, ptr %t61 + %t93 = getelementptr inbounds %Cmp_Val, ptr %t92, i32 0, i32 0 + %t94 = load ptr, ptr %t93 + %t95 = call ptr @fn_str_concat(ptr %t91, ptr %t94) + %t96 = call ptr @fn_str_concat(ptr %t95, ptr @.str701) + %t97 = load ptr, ptr %t70 + %t98 = getelementptr inbounds %Cmp_Val, ptr %t97, i32 0, i32 0 + %t99 = load ptr, ptr %t98 + %t100 = call ptr @fn_str_concat(ptr %t96, ptr %t99) + %t101 = call ptr @fn_emit_bind(ptr %t100) + %t102 = load ptr, ptr %t61 + %t103 = getelementptr inbounds %Cmp_Val, ptr %t102, i32 0, i32 1 + %t104 = load ptr, ptr %t103 + %t105 = call ptr @fn_val(ptr %t101, ptr %t104) + store ptr %t105, ptr %retval + br label %ret +ifend7: + %t106 = load ptr, ptr %t1 + %t107 = getelementptr inbounds %Cmp_Node, ptr %t106, i32 0, i32 7 + %t108 = load ptr, ptr %t107 + %t109 = getelementptr inbounds %LSlice, ptr %t108, i32 0, i32 0 + %t110 = load ptr, ptr %t109 + %t111 = getelementptr inbounds ptr, ptr %t110, i32 0 + %t112 = load ptr, ptr %t111 + %t113 = call ptr @fn_emit_expr(ptr %t112) + store ptr %t113, ptr %t114 + %t115 = load ptr, ptr %t1 + %t116 = getelementptr inbounds %Cmp_Node, ptr %t115, i32 0, i32 7 + %t117 = load ptr, ptr %t116 + %t118 = getelementptr inbounds %LSlice, ptr %t117, i32 0, i32 0 + %t119 = load ptr, ptr %t118 + %t120 = getelementptr inbounds ptr, ptr %t119, i32 1 + %t121 = load ptr, ptr %t120 + %t122 = call ptr @fn_emit_expr(ptr %t121) + store ptr %t122, ptr %t123 + %t124 = load ptr, ptr %t1 + %t125 = getelementptr inbounds %Cmp_Node, ptr %t124, i32 0, i32 7 + %t126 = load ptr, ptr %t125 + %t127 = getelementptr inbounds %LSlice, ptr %t126, i32 0, i32 0 + %t128 = load ptr, ptr %t127 + %t129 = getelementptr inbounds ptr, ptr %t128, i32 2 + %t130 = load ptr, ptr %t129 + %t131 = call ptr @fn_emit_expr(ptr %t130) + store ptr %t131, ptr %t132 + %t133 = load ptr, ptr %t114 + %t134 = getelementptr inbounds %Cmp_Val, ptr %t133, i32 0, i32 0 + %t135 = load ptr, ptr %t134 + %t136 = call ptr @fn_str_concat(ptr @.str702, ptr %t135) + %t137 = call ptr @fn_str_concat(ptr %t136, ptr @.str703) + %t138 = load ptr, ptr %t132 + %t139 = getelementptr inbounds %Cmp_Val, ptr %t138, i32 0, i32 0 + %t140 = load ptr, ptr %t139 + %t141 = call ptr @fn_str_concat(ptr %t137, ptr %t140) + %t142 = call ptr @fn_emit_bind(ptr %t141) + store ptr %t142, ptr %t143 + %t144 = load ptr, ptr %t143 + %t145 = call ptr @fn_str_concat(ptr @.str704, ptr %t144) + %t146 = call ptr @fn_str_concat(ptr %t145, ptr @.str705) + %t147 = load ptr, ptr %t114 + %t148 = getelementptr inbounds %Cmp_Val, ptr %t147, i32 0, i32 0 + %t149 = load ptr, ptr %t148 + %t150 = call ptr @fn_str_concat(ptr %t146, ptr %t149) + %t151 = call ptr @fn_str_concat(ptr %t150, ptr @.str706) + %t152 = load ptr, ptr %t132 + %t153 = getelementptr inbounds %Cmp_Val, ptr %t152, i32 0, i32 0 + %t154 = load ptr, ptr %t153 + %t155 = call ptr @fn_str_concat(ptr %t151, ptr %t154) + %t156 = call ptr @fn_emit_bind(ptr %t155) + store ptr %t156, ptr %t157 + %t158 = load ptr, ptr %t123 + %t159 = getelementptr inbounds %Cmp_Val, ptr %t158, i32 0, i32 0 + %t160 = load ptr, ptr %t159 + %t161 = call ptr @fn_str_concat(ptr @.str707, ptr %t160) + %t162 = call ptr @fn_str_concat(ptr %t161, ptr @.str708) + %t163 = load ptr, ptr %t157 + %t164 = call ptr @fn_str_concat(ptr %t162, ptr %t163) + %t165 = call ptr @fn_emit_bind(ptr %t164) + store ptr %t165, ptr %t166 + %t167 = load ptr, ptr %t166 + %t168 = call ptr @fn_str_concat(ptr @.str709, ptr %t167) + %t169 = call ptr @fn_str_concat(ptr %t168, ptr @.str710) + %t170 = load ptr, ptr %t123 + %t171 = getelementptr inbounds %Cmp_Val, ptr %t170, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = call ptr @fn_str_concat(ptr %t169, ptr %t172) + %t174 = call ptr @fn_str_concat(ptr %t173, ptr @.str711) + %t175 = load ptr, ptr %t157 + %t176 = call ptr @fn_str_concat(ptr %t174, ptr %t175) + %t177 = call ptr @fn_emit_bind(ptr %t176) + %t178 = load ptr, ptr %t114 + %t179 = getelementptr inbounds %Cmp_Val, ptr %t178, i32 0, i32 1 + %t180 = load ptr, ptr %t179 + %t181 = call ptr @fn_val(ptr %t177, ptr %t180) + store ptr %t181, ptr %retval + br label %ret +ret: + %t182 = load ptr, ptr %retval + ret ptr %t182 +} + +define ptr @fn_fx_mul_code(ptr %arg_a, ptr %arg_b) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t6 = alloca ptr + %t11 = alloca ptr + %t18 = alloca ptr + %t23 = alloca ptr + store ptr %arg_a, ptr %t0 + store ptr %arg_b, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_str_concat(ptr @.str712, ptr %t2) + %t4 = call ptr @fn_str_concat(ptr %t3, ptr @.str713) + %t5 = call ptr @fn_emit_bind(ptr %t4) + store ptr %t5, ptr %t6 + %t7 = load ptr, ptr %t1 + %t8 = call ptr @fn_str_concat(ptr @.str714, ptr %t7) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str715) + %t10 = call ptr @fn_emit_bind(ptr %t9) + store ptr %t10, ptr %t11 + %t12 = load ptr, ptr %t6 + %t13 = call ptr @fn_str_concat(ptr @.str716, ptr %t12) + %t14 = call ptr @fn_str_concat(ptr %t13, ptr @.str717) + %t15 = load ptr, ptr %t11 + %t16 = call ptr @fn_str_concat(ptr %t14, ptr %t15) + %t17 = call ptr @fn_emit_bind(ptr %t16) + store ptr %t17, ptr %t18 + %t19 = load ptr, ptr %t18 + %t20 = call ptr @fn_str_concat(ptr @.str718, ptr %t19) + %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str719) + %t22 = call ptr @fn_emit_bind(ptr %t21) + store ptr %t22, ptr %t23 + %t24 = load ptr, ptr %t23 + %t25 = call ptr @fn_str_concat(ptr @.str720, ptr %t24) + %t26 = call ptr @fn_str_concat(ptr %t25, ptr @.str721) + %t27 = call ptr @fn_emit_bind(ptr %t26) + store ptr %t27, ptr %retval + br label %ret +ret: + %t28 = load ptr, ptr %retval + ret ptr %t28 +} + +define ptr @fn_fx_div_code(ptr %arg_a, ptr %arg_b) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t6 = alloca ptr + %t11 = alloca ptr + %t16 = alloca ptr + %t23 = alloca ptr + store ptr %arg_a, ptr %t0 + store ptr %arg_b, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_str_concat(ptr @.str722, ptr %t2) + %t4 = call ptr @fn_str_concat(ptr %t3, ptr @.str723) + %t5 = call ptr @fn_emit_bind(ptr %t4) + store ptr %t5, ptr %t6 + %t7 = load ptr, ptr %t6 + %t8 = call ptr @fn_str_concat(ptr @.str724, ptr %t7) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str725) + %t10 = call ptr @fn_emit_bind(ptr %t9) + store ptr %t10, ptr %t11 + %t12 = load ptr, ptr %t1 + %t13 = call ptr @fn_str_concat(ptr @.str726, ptr %t12) + %t14 = call ptr @fn_str_concat(ptr %t13, ptr @.str727) + %t15 = call ptr @fn_emit_bind(ptr %t14) + store ptr %t15, ptr %t16 + %t17 = load ptr, ptr %t11 + %t18 = call ptr @fn_str_concat(ptr @.str728, ptr %t17) + %t19 = call ptr @fn_str_concat(ptr %t18, ptr @.str729) + %t20 = load ptr, ptr %t16 + %t21 = call ptr @fn_str_concat(ptr %t19, ptr %t20) + %t22 = call ptr @fn_emit_bind(ptr %t21) + store ptr %t22, ptr %t23 + %t24 = load ptr, ptr %t23 + %t25 = call ptr @fn_str_concat(ptr @.str730, ptr %t24) + %t26 = call ptr @fn_str_concat(ptr %t25, ptr @.str731) + %t27 = call ptr @fn_emit_bind(ptr %t26) + store ptr %t27, ptr %retval + br label %ret +ret: + %t28 = load ptr, ptr %retval + ret ptr %t28 +} + +define ptr @fn_fx_lerp_code(ptr %arg_a, ptr %arg_b, ptr %arg_t) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t9 = alloca ptr + %t13 = alloca ptr + store ptr %arg_a, ptr %t0 + store ptr %arg_b, ptr %t1 + store ptr %arg_t, ptr %t2 + %t3 = load ptr, ptr %t1 + %t4 = call ptr @fn_str_concat(ptr @.str732, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str733) + %t6 = load ptr, ptr %t0 + %t7 = call ptr @fn_str_concat(ptr %t5, ptr %t6) + %t8 = call ptr @fn_emit_bind(ptr %t7) + store ptr %t8, ptr %t9 + %t10 = load ptr, ptr %t9 + %t11 = load ptr, ptr %t2 + %t12 = call ptr @fn_fx_mul_code(ptr %t10, ptr %t11) + store ptr %t12, ptr %t13 + %t14 = load ptr, ptr %t0 + %t15 = call ptr @fn_str_concat(ptr @.str734, ptr %t14) + %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str735) + %t17 = load ptr, ptr %t13 + %t18 = call ptr @fn_str_concat(ptr %t16, ptr %t17) + %t19 = call ptr @fn_emit_bind(ptr %t18) + store ptr %t19, ptr %retval + br label %ret +ret: + %t20 = load ptr, ptr %retval + ret ptr %t20 +} + +define ptr @fn_fx_inv_lerp_code(ptr %arg_a, ptr %arg_b, ptr %arg_v) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t9 = alloca ptr + %t16 = alloca ptr + store ptr %arg_a, ptr %t0 + store ptr %arg_b, ptr %t1 + store ptr %arg_v, ptr %t2 + %t3 = load ptr, ptr %t2 + %t4 = call ptr @fn_str_concat(ptr @.str736, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str737) + %t6 = load ptr, ptr %t0 + %t7 = call ptr @fn_str_concat(ptr %t5, ptr %t6) + %t8 = call ptr @fn_emit_bind(ptr %t7) + store ptr %t8, ptr %t9 + %t10 = load ptr, ptr %t1 + %t11 = call ptr @fn_str_concat(ptr @.str738, ptr %t10) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str739) + %t13 = load ptr, ptr %t0 + %t14 = call ptr @fn_str_concat(ptr %t12, ptr %t13) + %t15 = call ptr @fn_emit_bind(ptr %t14) + store ptr %t15, ptr %t16 + %t17 = load ptr, ptr %t9 + %t18 = load ptr, ptr %t16 + %t19 = call ptr @fn_fx_div_code(ptr %t17, ptr %t18) + store ptr %t19, ptr %retval + br label %ret +ret: + %t20 = load ptr, ptr %retval + ret ptr %t20 +} + +define i32 @fn_is_math_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t3 = alloca i32 + %t28 = alloca i32 + %t29 = alloca i32 + %t30 = alloca i32 + %t55 = alloca i32 + %t56 = alloca i32 + %t74 = alloca i32 + %t75 = alloca i32 + %t76 = alloca i32 + %t77 = alloca i32 + %t109 = alloca i32 + %t110 = alloca i32 + %t128 = alloca i32 + %t129 = alloca i32 + %t130 = alloca i32 + %t155 = alloca i32 + %t156 = alloca i32 + %t157 = alloca i32 + %t182 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t4 = load ptr, ptr %t0 + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str740) + %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_str_eq(ptr %t8, ptr @.str741) + %t10 = icmp ne i32 %t9, 0 + %t11 = zext i1 %t10 to i32 + store i32 %t11, ptr %t3 + br label %scend1 +scend1: + %t12 = load i32, ptr %t3 + %t13 = icmp ne i32 %t12, 0 + %t14 = zext i1 %t13 to i32 + store i32 %t14, ptr %t2 + br i1 %t13, label %scend3, label %sc2 +sc2: + %t15 = load ptr, ptr %t0 + %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str742) + %t17 = icmp ne i32 %t16, 0 + %t18 = zext i1 %t17 to i32 + store i32 %t18, ptr %t2 + br label %scend3 +scend3: + %t19 = load i32, ptr %t2 + %t20 = icmp ne i32 %t19, 0 + %t21 = zext i1 %t20 to i32 + store i32 %t21, ptr %t1 + br i1 %t20, label %scend5, label %sc4 +sc4: + %t22 = load ptr, ptr %t0 + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str743) + %t24 = icmp ne i32 %t23, 0 + %t25 = zext i1 %t24 to i32 + store i32 %t25, ptr %t1 + br label %scend5 +scend5: + %t26 = load i32, ptr %t1 + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then6, label %ifend8 +then6: + store i32 1, ptr %retval + br label %ret +ifend8: + %t31 = load ptr, ptr %t0 + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str744) + %t33 = icmp ne i32 %t32, 0 + %t34 = zext i1 %t33 to i32 + store i32 %t34, ptr %t30 + br i1 %t33, label %scend10, label %sc9 +sc9: + %t35 = load ptr, ptr %t0 + %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str745) + %t37 = icmp ne i32 %t36, 0 + %t38 = zext i1 %t37 to i32 + store i32 %t38, ptr %t30 + br label %scend10 +scend10: + %t39 = load i32, ptr %t30 + %t40 = icmp ne i32 %t39, 0 + %t41 = zext i1 %t40 to i32 + store i32 %t41, ptr %t29 + br i1 %t40, label %scend12, label %sc11 +sc11: + %t42 = load ptr, ptr %t0 + %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str746) + %t44 = icmp ne i32 %t43, 0 + %t45 = zext i1 %t44 to i32 + store i32 %t45, ptr %t29 + br label %scend12 +scend12: + %t46 = load i32, ptr %t29 + %t47 = icmp ne i32 %t46, 0 + %t48 = zext i1 %t47 to i32 + store i32 %t48, ptr %t28 + br i1 %t47, label %scend14, label %sc13 +sc13: + %t49 = load ptr, ptr %t0 + %t50 = call i32 @fn_str_eq(ptr %t49, ptr @.str747) + %t51 = icmp ne i32 %t50, 0 + %t52 = zext i1 %t51 to i32 + store i32 %t52, ptr %t28 + br label %scend14 +scend14: + %t53 = load i32, ptr %t28 + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then15, label %ifend17 +then15: + store i32 1, ptr %retval + br label %ret +ifend17: + %t57 = load ptr, ptr %t0 + %t58 = call i32 @fn_str_eq(ptr %t57, ptr @.str748) + %t59 = icmp ne i32 %t58, 0 + %t60 = zext i1 %t59 to i32 + store i32 %t60, ptr %t56 + br i1 %t59, label %scend19, label %sc18 +sc18: + %t61 = load ptr, ptr %t0 + %t62 = call i32 @fn_str_eq(ptr %t61, ptr @.str749) + %t63 = icmp ne i32 %t62, 0 + %t64 = zext i1 %t63 to i32 + store i32 %t64, ptr %t56 + br label %scend19 +scend19: + %t65 = load i32, ptr %t56 + %t66 = icmp ne i32 %t65, 0 + %t67 = zext i1 %t66 to i32 + store i32 %t67, ptr %t55 + br i1 %t66, label %scend21, label %sc20 +sc20: + %t68 = load ptr, ptr %t0 + %t69 = call i32 @fn_str_eq(ptr %t68, ptr @.str750) + %t70 = icmp ne i32 %t69, 0 + %t71 = zext i1 %t70 to i32 + store i32 %t71, ptr %t55 + br label %scend21 +scend21: + %t72 = load i32, ptr %t55 + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then22, label %ifend24 +then22: + store i32 1, ptr %retval + br label %ret +ifend24: + %t78 = load ptr, ptr %t0 + %t79 = call i32 @fn_str_eq(ptr %t78, ptr @.str751) + %t80 = icmp ne i32 %t79, 0 + %t81 = zext i1 %t80 to i32 + store i32 %t81, ptr %t77 + br i1 %t80, label %scend26, label %sc25 +sc25: + %t82 = load ptr, ptr %t0 + %t83 = call i32 @fn_str_eq(ptr %t82, ptr @.str752) + %t84 = icmp ne i32 %t83, 0 + %t85 = zext i1 %t84 to i32 + store i32 %t85, ptr %t77 + br label %scend26 +scend26: + %t86 = load i32, ptr %t77 + %t87 = icmp ne i32 %t86, 0 + %t88 = zext i1 %t87 to i32 + store i32 %t88, ptr %t76 + br i1 %t87, label %scend28, label %sc27 +sc27: + %t89 = load ptr, ptr %t0 + %t90 = call i32 @fn_str_eq(ptr %t89, ptr @.str753) + %t91 = icmp ne i32 %t90, 0 + %t92 = zext i1 %t91 to i32 + store i32 %t92, ptr %t76 + br label %scend28 +scend28: + %t93 = load i32, ptr %t76 + %t94 = icmp ne i32 %t93, 0 + %t95 = zext i1 %t94 to i32 + store i32 %t95, ptr %t75 + br i1 %t94, label %scend30, label %sc29 +sc29: + %t96 = load ptr, ptr %t0 + %t97 = call i32 @fn_str_eq(ptr %t96, ptr @.str754) + %t98 = icmp ne i32 %t97, 0 + %t99 = zext i1 %t98 to i32 + store i32 %t99, ptr %t75 + br label %scend30 +scend30: + %t100 = load i32, ptr %t75 + %t101 = icmp ne i32 %t100, 0 + %t102 = zext i1 %t101 to i32 + store i32 %t102, ptr %t74 + br i1 %t101, label %scend32, label %sc31 +sc31: + %t103 = load ptr, ptr %t0 + %t104 = call i32 @fn_str_eq(ptr %t103, ptr @.str755) + %t105 = icmp ne i32 %t104, 0 + %t106 = zext i1 %t105 to i32 + store i32 %t106, ptr %t74 + br label %scend32 +scend32: + %t107 = load i32, ptr %t74 + %t108 = icmp ne i32 %t107, 0 + br i1 %t108, label %then33, label %ifend35 +then33: + store i32 1, ptr %retval + br label %ret +ifend35: + %t111 = load ptr, ptr %t0 + %t112 = call i32 @fn_str_eq(ptr %t111, ptr @.str756) + %t113 = icmp ne i32 %t112, 0 + %t114 = zext i1 %t113 to i32 + store i32 %t114, ptr %t110 + br i1 %t113, label %scend37, label %sc36 +sc36: + %t115 = load ptr, ptr %t0 + %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str757) + %t117 = icmp ne i32 %t116, 0 + %t118 = zext i1 %t117 to i32 + store i32 %t118, ptr %t110 + br label %scend37 +scend37: + %t119 = load i32, ptr %t110 + %t120 = icmp ne i32 %t119, 0 + %t121 = zext i1 %t120 to i32 + store i32 %t121, ptr %t109 + br i1 %t120, label %scend39, label %sc38 +sc38: + %t122 = load ptr, ptr %t0 + %t123 = call i32 @fn_str_eq(ptr %t122, ptr @.str758) + %t124 = icmp ne i32 %t123, 0 + %t125 = zext i1 %t124 to i32 + store i32 %t125, ptr %t109 + br label %scend39 +scend39: + %t126 = load i32, ptr %t109 + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then40, label %ifend42 +then40: + store i32 1, ptr %retval + br label %ret +ifend42: + %t131 = load ptr, ptr %t0 + %t132 = call i32 @fn_str_eq(ptr %t131, ptr @.str759) + %t133 = icmp ne i32 %t132, 0 + %t134 = zext i1 %t133 to i32 + store i32 %t134, ptr %t130 + br i1 %t133, label %scend44, label %sc43 +sc43: + %t135 = load ptr, ptr %t0 + %t136 = call i32 @fn_str_eq(ptr %t135, ptr @.str760) + %t137 = icmp ne i32 %t136, 0 + %t138 = zext i1 %t137 to i32 + store i32 %t138, ptr %t130 + br label %scend44 +scend44: + %t139 = load i32, ptr %t130 + %t140 = icmp ne i32 %t139, 0 + %t141 = zext i1 %t140 to i32 + store i32 %t141, ptr %t129 + br i1 %t140, label %scend46, label %sc45 +sc45: + %t142 = load ptr, ptr %t0 + %t143 = call i32 @fn_str_eq(ptr %t142, ptr @.str761) + %t144 = icmp ne i32 %t143, 0 + %t145 = zext i1 %t144 to i32 + store i32 %t145, ptr %t129 + br label %scend46 +scend46: + %t146 = load i32, ptr %t129 + %t147 = icmp ne i32 %t146, 0 + %t148 = zext i1 %t147 to i32 + store i32 %t148, ptr %t128 + br i1 %t147, label %scend48, label %sc47 +sc47: + %t149 = load ptr, ptr %t0 + %t150 = call i32 @fn_str_eq(ptr %t149, ptr @.str762) + %t151 = icmp ne i32 %t150, 0 + %t152 = zext i1 %t151 to i32 + store i32 %t152, ptr %t128 + br label %scend48 +scend48: + %t153 = load i32, ptr %t128 + %t154 = icmp ne i32 %t153, 0 + br i1 %t154, label %then49, label %ifend51 +then49: + store i32 1, ptr %retval + br label %ret +ifend51: + %t158 = load ptr, ptr %t0 + %t159 = call i32 @fn_str_eq(ptr %t158, ptr @.str763) + %t160 = icmp ne i32 %t159, 0 + %t161 = zext i1 %t160 to i32 + store i32 %t161, ptr %t157 + br i1 %t160, label %scend53, label %sc52 +sc52: + %t162 = load ptr, ptr %t0 + %t163 = call i32 @fn_str_eq(ptr %t162, ptr @.str764) + %t164 = icmp ne i32 %t163, 0 + %t165 = zext i1 %t164 to i32 + store i32 %t165, ptr %t157 + br label %scend53 +scend53: + %t166 = load i32, ptr %t157 + %t167 = icmp ne i32 %t166, 0 + %t168 = zext i1 %t167 to i32 + store i32 %t168, ptr %t156 + br i1 %t167, label %scend55, label %sc54 +sc54: + %t169 = load ptr, ptr %t0 + %t170 = call i32 @fn_str_eq(ptr %t169, ptr @.str765) + %t171 = icmp ne i32 %t170, 0 + %t172 = zext i1 %t171 to i32 + store i32 %t172, ptr %t156 + br label %scend55 +scend55: + %t173 = load i32, ptr %t156 + %t174 = icmp ne i32 %t173, 0 + %t175 = zext i1 %t174 to i32 + store i32 %t175, ptr %t155 + br i1 %t174, label %scend57, label %sc56 +sc56: + %t176 = load ptr, ptr %t0 + %t177 = call i32 @fn_str_eq(ptr %t176, ptr @.str766) + %t178 = icmp ne i32 %t177, 0 + %t179 = zext i1 %t178 to i32 + store i32 %t179, ptr %t155 + br label %scend57 +scend57: + %t180 = load i32, ptr %t155 + %t181 = icmp ne i32 %t180, 0 + br i1 %t181, label %then58, label %ifend60 +then58: + store i32 1, ptr %retval + br label %ret +ifend60: + %t183 = load ptr, ptr %t0 + %t184 = call i32 @fn_str_eq(ptr %t183, ptr @.str767) + %t185 = icmp ne i32 %t184, 0 + %t186 = zext i1 %t185 to i32 + store i32 %t186, ptr %t182 + br i1 %t185, label %scend62, label %sc61 +sc61: + %t187 = load ptr, ptr %t0 + %t188 = call i32 @fn_str_eq(ptr %t187, ptr @.str768) + %t189 = icmp ne i32 %t188, 0 + %t190 = zext i1 %t189 to i32 + store i32 %t190, ptr %t182 + br label %scend62 +scend62: + %t191 = load i32, ptr %t182 + %t192 = icmp ne i32 %t191, 0 + br i1 %t192, label %then63, label %ifend65 +then63: + store i32 1, ptr %retval + br label %ret +ifend65: + store i32 0, ptr %retval + br label %ret +ret: + %t193 = load i32, ptr %retval + ret i32 %t193 +} + +define ptr @fn_emit_math_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca i32 + %t3 = alloca i32 + %t4 = alloca i32 + %t43 = alloca ptr + %t50 = alloca ptr + %t57 = alloca ptr + %t62 = alloca ptr + %t81 = alloca ptr + %t100 = alloca ptr + %t107 = alloca ptr + %t124 = alloca ptr + %t131 = alloca ptr + %t148 = alloca ptr + %t157 = alloca ptr + %t166 = alloca ptr + %t189 = alloca ptr + %t198 = alloca ptr + %t207 = alloca ptr + %t230 = alloca ptr + %t249 = alloca ptr + %t268 = alloca ptr + %t275 = alloca ptr + %t292 = alloca ptr + %t299 = alloca ptr + %t306 = alloca ptr + %t311 = alloca ptr + %t327 = alloca ptr + %t336 = alloca ptr + %t360 = alloca ptr + %t368 = alloca ptr + %t372 = alloca ptr + %t377 = alloca ptr + %t399 = alloca ptr + %t407 = alloca ptr + %t411 = alloca ptr + %t416 = alloca ptr + %t438 = alloca ptr + %t447 = alloca ptr + %t455 = alloca ptr + %t463 = alloca ptr + %t470 = alloca ptr + %t487 = alloca ptr + %t496 = alloca ptr + %t505 = alloca ptr + %t514 = alloca ptr + %t525 = alloca ptr + %t536 = alloca ptr + %t540 = alloca ptr + %t544 = alloca ptr + %t563 = alloca ptr + %t572 = alloca ptr + %t581 = alloca ptr + %t590 = alloca ptr + %t601 = alloca ptr + %t612 = alloca ptr + %t616 = alloca ptr + %t620 = alloca ptr + %t627 = alloca ptr + %t644 = alloca ptr + %t661 = alloca ptr + %t678 = alloca ptr + %t687 = alloca ptr + %t698 = alloca ptr + %t707 = alloca ptr + %t728 = alloca ptr + %t737 = alloca ptr + %t746 = alloca ptr + %t757 = alloca ptr + %t768 = alloca ptr + %t775 = alloca ptr + %t782 = alloca ptr + %t789 = alloca ptr + %t810 = alloca ptr + %t819 = alloca ptr + %t826 = alloca ptr + %t835 = alloca ptr + %t842 = alloca ptr + %t849 = alloca ptr + %t858 = alloca ptr + %t862 = alloca ptr + %t867 = alloca ptr + %t877 = alloca ptr + %t898 = alloca ptr + %t907 = alloca ptr + %t915 = alloca ptr + %t920 = alloca ptr + %t925 = alloca ptr + %t946 = alloca ptr + %t955 = alloca ptr + %t964 = alloca ptr + %t975 = alloca ptr + %t979 = alloca ptr + %t984 = alloca ptr + %t994 = alloca ptr + %t999 = alloca ptr + %t1004 = alloca ptr + %t1009 = alloca ptr + %t1016 = alloca ptr + %t1025 = alloca ptr + %t1034 = alloca ptr + %t1043 = alloca ptr + %t1067 = alloca ptr + %t1076 = alloca ptr + %t1085 = alloca ptr + %t1096 = alloca ptr + %t1101 = alloca ptr + %t1108 = alloca ptr + %t1113 = alloca ptr + %t1120 = alloca ptr + %t1125 = alloca ptr + %t1129 = alloca ptr + %t1133 = alloca ptr + %t1146 = alloca ptr + %t1155 = alloca ptr + %t1164 = alloca ptr + %t1173 = alloca ptr + %t1182 = alloca ptr + %t1193 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t5 = load ptr, ptr %t0 + %t6 = call i32 @fn_str_eq(ptr %t5, ptr @.str769) + %t7 = icmp ne i32 %t6, 0 + %t8 = zext i1 %t7 to i32 + store i32 %t8, ptr %t4 + br i1 %t7, label %scend1, label %sc0 +sc0: + %t9 = load ptr, ptr %t0 + %t10 = call i32 @fn_str_eq(ptr %t9, ptr @.str770) + %t11 = icmp ne i32 %t10, 0 + %t12 = zext i1 %t11 to i32 + store i32 %t12, ptr %t4 + br label %scend1 +scend1: + %t13 = load i32, ptr %t4 + %t14 = icmp ne i32 %t13, 0 + %t15 = zext i1 %t14 to i32 + store i32 %t15, ptr %t3 + br i1 %t14, label %scend3, label %sc2 +sc2: + %t16 = load ptr, ptr %t0 + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str771) + %t18 = icmp ne i32 %t17, 0 + %t19 = zext i1 %t18 to i32 + store i32 %t19, ptr %t3 + br label %scend3 +scend3: + %t20 = load i32, ptr %t3 + %t21 = icmp ne i32 %t20, 0 + %t22 = zext i1 %t21 to i32 + store i32 %t22, ptr %t2 + br i1 %t21, label %scend5, label %sc4 +sc4: + %t23 = load ptr, ptr %t0 + %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str772) + %t25 = icmp ne i32 %t24, 0 + %t26 = zext i1 %t25 to i32 + store i32 %t26, ptr %t2 + br label %scend5 +scend5: + %t27 = load i32, ptr %t2 + %t28 = icmp ne i32 %t27, 0 + br i1 %t28, label %then6, label %ifend8 +then6: + %t29 = load ptr, ptr %t0 + %t30 = load ptr, ptr %t1 + %t31 = call ptr @fn_emit_math_builtin(ptr %t29, ptr %t30) + store ptr %t31, ptr %retval + br label %ret +ifend8: + %t32 = load ptr, ptr %t0 + %t33 = call i32 @fn_str_eq(ptr %t32, ptr @.str773) + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then9, label %ifend11 +then9: + %t35 = load ptr, ptr %t1 + %t36 = getelementptr inbounds %Cmp_Node, ptr %t35, i32 0, i32 7 + %t37 = load ptr, ptr %t36 + %t38 = getelementptr inbounds %LSlice, ptr %t37, i32 0, i32 0 + %t39 = load ptr, ptr %t38 + %t40 = getelementptr inbounds ptr, ptr %t39, i32 0 + %t41 = load ptr, ptr %t40 + %t42 = call ptr @fn_emit_expr(ptr %t41) + store ptr %t42, ptr %t43 + %t44 = load ptr, ptr %t43 + %t45 = getelementptr inbounds %Cmp_Val, ptr %t44, i32 0, i32 0 + %t46 = load ptr, ptr %t45 + %t47 = call ptr @fn_str_concat(ptr @.str774, ptr %t46) + %t48 = call ptr @fn_str_concat(ptr %t47, ptr @.str775) + %t49 = call ptr @fn_emit_bind(ptr %t48) + store ptr %t49, ptr %t50 + %t51 = load ptr, ptr %t43 + %t52 = getelementptr inbounds %Cmp_Val, ptr %t51, i32 0, i32 0 + %t53 = load ptr, ptr %t52 + %t54 = call ptr @fn_str_concat(ptr @.str776, ptr %t53) + %t55 = call ptr @fn_str_concat(ptr %t54, ptr @.str777) + %t56 = call ptr @fn_emit_bind(ptr %t55) + store ptr %t56, ptr %t57 + %t58 = load ptr, ptr %t57 + %t59 = call ptr @fn_str_concat(ptr @.str778, ptr %t58) + %t60 = call ptr @fn_str_concat(ptr %t59, ptr @.str779) + %t61 = call ptr @fn_emit_bind(ptr %t60) + store ptr %t61, ptr %t62 + %t63 = load ptr, ptr %t50 + %t64 = call ptr @fn_str_concat(ptr @.str780, ptr %t63) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str781) + %t66 = load ptr, ptr %t62 + %t67 = call ptr @fn_str_concat(ptr %t65, ptr %t66) + %t68 = call ptr @fn_emit_bind(ptr %t67) + %t69 = call ptr @fn_val(ptr %t68, ptr @.str782) + store ptr %t69, ptr %retval + br label %ret +ifend11: + %t70 = load ptr, ptr %t0 + %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str783) + %t72 = icmp ne i32 %t71, 0 + br i1 %t72, label %then12, label %ifend14 +then12: + %t73 = load ptr, ptr %t1 + %t74 = getelementptr inbounds %Cmp_Node, ptr %t73, i32 0, i32 7 + %t75 = load ptr, ptr %t74 + %t76 = getelementptr inbounds %LSlice, ptr %t75, i32 0, i32 0 + %t77 = load ptr, ptr %t76 + %t78 = getelementptr inbounds ptr, ptr %t77, i32 0 + %t79 = load ptr, ptr %t78 + %t80 = call ptr @fn_emit_expr(ptr %t79) + store ptr %t80, ptr %t81 + %t82 = load ptr, ptr %t81 + %t83 = getelementptr inbounds %Cmp_Val, ptr %t82, i32 0, i32 0 + %t84 = load ptr, ptr %t83 + %t85 = call ptr @fn_str_concat(ptr @.str784, ptr %t84) + %t86 = call ptr @fn_str_concat(ptr %t85, ptr @.str785) + %t87 = call ptr @fn_emit_bind(ptr %t86) + %t88 = call ptr @fn_val(ptr %t87, ptr @.str786) + store ptr %t88, ptr %retval + br label %ret +ifend14: + %t89 = load ptr, ptr %t0 + %t90 = call i32 @fn_str_eq(ptr %t89, ptr @.str787) + %t91 = icmp ne i32 %t90, 0 + br i1 %t91, label %then15, label %ifend17 +then15: + %t92 = load ptr, ptr %t1 + %t93 = getelementptr inbounds %Cmp_Node, ptr %t92, i32 0, i32 7 + %t94 = load ptr, ptr %t93 + %t95 = getelementptr inbounds %LSlice, ptr %t94, i32 0, i32 0 + %t96 = load ptr, ptr %t95 + %t97 = getelementptr inbounds ptr, ptr %t96, i32 0 + %t98 = load ptr, ptr %t97 + %t99 = call ptr @fn_emit_expr(ptr %t98) + store ptr %t99, ptr %t100 + %t101 = load ptr, ptr %t100 + %t102 = getelementptr inbounds %Cmp_Val, ptr %t101, i32 0, i32 0 + %t103 = load ptr, ptr %t102 + %t104 = call ptr @fn_str_concat(ptr @.str788, ptr %t103) + %t105 = call ptr @fn_str_concat(ptr %t104, ptr @.str789) + %t106 = call ptr @fn_emit_bind(ptr %t105) + store ptr %t106, ptr %t107 + %t108 = load ptr, ptr %t107 + %t109 = call ptr @fn_str_concat(ptr @.str790, ptr %t108) + %t110 = call ptr @fn_str_concat(ptr %t109, ptr @.str791) + %t111 = call ptr @fn_emit_bind(ptr %t110) + %t112 = call ptr @fn_val(ptr %t111, ptr @.str792) + store ptr %t112, ptr %retval + br label %ret +ifend17: + %t113 = load ptr, ptr %t0 + %t114 = call i32 @fn_str_eq(ptr %t113, ptr @.str793) + %t115 = icmp ne i32 %t114, 0 + br i1 %t115, label %then18, label %ifend20 +then18: + %t116 = load ptr, ptr %t1 + %t117 = getelementptr inbounds %Cmp_Node, ptr %t116, i32 0, i32 7 + %t118 = load ptr, ptr %t117 + %t119 = getelementptr inbounds %LSlice, ptr %t118, i32 0, i32 0 + %t120 = load ptr, ptr %t119 + %t121 = getelementptr inbounds ptr, ptr %t120, i32 0 + %t122 = load ptr, ptr %t121 + %t123 = call ptr @fn_emit_expr(ptr %t122) + store ptr %t123, ptr %t124 + %t125 = load ptr, ptr %t124 + %t126 = getelementptr inbounds %Cmp_Val, ptr %t125, i32 0, i32 0 + %t127 = load ptr, ptr %t126 + %t128 = call ptr @fn_str_concat(ptr @.str794, ptr %t127) + %t129 = call ptr @fn_str_concat(ptr %t128, ptr @.str795) + %t130 = call ptr @fn_emit_bind(ptr %t129) + store ptr %t130, ptr %t131 + %t132 = load ptr, ptr %t131 + %t133 = call ptr @fn_str_concat(ptr @.str796, ptr %t132) + %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str797) + %t135 = call ptr @fn_emit_bind(ptr %t134) + %t136 = call ptr @fn_val(ptr %t135, ptr @.str798) + store ptr %t136, ptr %retval + br label %ret +ifend20: + %t137 = load ptr, ptr %t0 + %t138 = call i32 @fn_str_eq(ptr %t137, ptr @.str799) + %t139 = icmp ne i32 %t138, 0 + br i1 %t139, label %then21, label %ifend23 +then21: + %t140 = load ptr, ptr %t1 + %t141 = getelementptr inbounds %Cmp_Node, ptr %t140, i32 0, i32 7 + %t142 = load ptr, ptr %t141 + %t143 = getelementptr inbounds %LSlice, ptr %t142, i32 0, i32 0 + %t144 = load ptr, ptr %t143 + %t145 = getelementptr inbounds ptr, ptr %t144, i32 0 + %t146 = load ptr, ptr %t145 + %t147 = call ptr @fn_emit_expr(ptr %t146) + store ptr %t147, ptr %t148 + %t149 = load ptr, ptr %t1 + %t150 = getelementptr inbounds %Cmp_Node, ptr %t149, i32 0, i32 7 + %t151 = load ptr, ptr %t150 + %t152 = getelementptr inbounds %LSlice, ptr %t151, i32 0, i32 0 + %t153 = load ptr, ptr %t152 + %t154 = getelementptr inbounds ptr, ptr %t153, i32 1 + %t155 = load ptr, ptr %t154 + %t156 = call ptr @fn_emit_expr(ptr %t155) + store ptr %t156, ptr %t157 + %t158 = load ptr, ptr %t1 + %t159 = getelementptr inbounds %Cmp_Node, ptr %t158, i32 0, i32 7 + %t160 = load ptr, ptr %t159 + %t161 = getelementptr inbounds %LSlice, ptr %t160, i32 0, i32 0 + %t162 = load ptr, ptr %t161 + %t163 = getelementptr inbounds ptr, ptr %t162, i32 2 + %t164 = load ptr, ptr %t163 + %t165 = call ptr @fn_emit_expr(ptr %t164) + store ptr %t165, ptr %t166 + %t167 = load ptr, ptr %t148 + %t168 = getelementptr inbounds %Cmp_Val, ptr %t167, i32 0, i32 0 + %t169 = load ptr, ptr %t168 + %t170 = load ptr, ptr %t157 + %t171 = getelementptr inbounds %Cmp_Val, ptr %t170, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = load ptr, ptr %t166 + %t174 = getelementptr inbounds %Cmp_Val, ptr %t173, i32 0, i32 0 + %t175 = load ptr, ptr %t174 + %t176 = call ptr @fn_fx_lerp_code(ptr %t169, ptr %t172, ptr %t175) + %t177 = call ptr @fn_val(ptr %t176, ptr @.str800) + store ptr %t177, ptr %retval + br label %ret +ifend23: + %t178 = load ptr, ptr %t0 + %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str801) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then24, label %ifend26 +then24: + %t181 = load ptr, ptr %t1 + %t182 = getelementptr inbounds %Cmp_Node, ptr %t181, i32 0, i32 7 + %t183 = load ptr, ptr %t182 + %t184 = getelementptr inbounds %LSlice, ptr %t183, i32 0, i32 0 + %t185 = load ptr, ptr %t184 + %t186 = getelementptr inbounds ptr, ptr %t185, i32 0 + %t187 = load ptr, ptr %t186 + %t188 = call ptr @fn_emit_expr(ptr %t187) + store ptr %t188, ptr %t189 + %t190 = load ptr, ptr %t1 + %t191 = getelementptr inbounds %Cmp_Node, ptr %t190, i32 0, i32 7 + %t192 = load ptr, ptr %t191 + %t193 = getelementptr inbounds %LSlice, ptr %t192, i32 0, i32 0 + %t194 = load ptr, ptr %t193 + %t195 = getelementptr inbounds ptr, ptr %t194, i32 1 + %t196 = load ptr, ptr %t195 + %t197 = call ptr @fn_emit_expr(ptr %t196) + store ptr %t197, ptr %t198 + %t199 = load ptr, ptr %t1 + %t200 = getelementptr inbounds %Cmp_Node, ptr %t199, i32 0, i32 7 + %t201 = load ptr, ptr %t200 + %t202 = getelementptr inbounds %LSlice, ptr %t201, i32 0, i32 0 + %t203 = load ptr, ptr %t202 + %t204 = getelementptr inbounds ptr, ptr %t203, i32 2 + %t205 = load ptr, ptr %t204 + %t206 = call ptr @fn_emit_expr(ptr %t205) + store ptr %t206, ptr %t207 + %t208 = load ptr, ptr %t189 + %t209 = getelementptr inbounds %Cmp_Val, ptr %t208, i32 0, i32 0 + %t210 = load ptr, ptr %t209 + %t211 = load ptr, ptr %t198 + %t212 = getelementptr inbounds %Cmp_Val, ptr %t211, i32 0, i32 0 + %t213 = load ptr, ptr %t212 + %t214 = load ptr, ptr %t207 + %t215 = getelementptr inbounds %Cmp_Val, ptr %t214, i32 0, i32 0 + %t216 = load ptr, ptr %t215 + %t217 = call ptr @fn_fx_inv_lerp_code(ptr %t210, ptr %t213, ptr %t216) + %t218 = call ptr @fn_val(ptr %t217, ptr @.str802) + store ptr %t218, ptr %retval + br label %ret +ifend26: + %t219 = load ptr, ptr %t0 + %t220 = call i32 @fn_str_eq(ptr %t219, ptr @.str803) + %t221 = icmp ne i32 %t220, 0 + br i1 %t221, label %then27, label %ifend29 +then27: + store i32 1, ptr @g_g_uses_mathrt + %t222 = load ptr, ptr %t1 + %t223 = getelementptr inbounds %Cmp_Node, ptr %t222, i32 0, i32 7 + %t224 = load ptr, ptr %t223 + %t225 = getelementptr inbounds %LSlice, ptr %t224, i32 0, i32 0 + %t226 = load ptr, ptr %t225 + %t227 = getelementptr inbounds ptr, ptr %t226, i32 0 + %t228 = load ptr, ptr %t227 + %t229 = call ptr @fn_emit_expr(ptr %t228) + store ptr %t229, ptr %t230 + %t231 = load ptr, ptr %t230 + %t232 = getelementptr inbounds %Cmp_Val, ptr %t231, i32 0, i32 0 + %t233 = load ptr, ptr %t232 + %t234 = call ptr @fn_str_concat(ptr @.str804, ptr %t233) + %t235 = call ptr @fn_str_concat(ptr %t234, ptr @.str805) + %t236 = call ptr @fn_emit_bind(ptr %t235) + %t237 = call ptr @fn_val(ptr %t236, ptr @.str806) + store ptr %t237, ptr %retval + br label %ret +ifend29: + %t238 = load ptr, ptr %t0 + %t239 = call i32 @fn_str_eq(ptr %t238, ptr @.str807) + %t240 = icmp ne i32 %t239, 0 + br i1 %t240, label %then30, label %ifend32 +then30: + store i32 1, ptr @g_g_uses_mathrt + %t241 = load ptr, ptr %t1 + %t242 = getelementptr inbounds %Cmp_Node, ptr %t241, i32 0, i32 7 + %t243 = load ptr, ptr %t242 + %t244 = getelementptr inbounds %LSlice, ptr %t243, i32 0, i32 0 + %t245 = load ptr, ptr %t244 + %t246 = getelementptr inbounds ptr, ptr %t245, i32 0 + %t247 = load ptr, ptr %t246 + %t248 = call ptr @fn_emit_expr(ptr %t247) + store ptr %t248, ptr %t249 + %t250 = load ptr, ptr %t249 + %t251 = getelementptr inbounds %Cmp_Val, ptr %t250, i32 0, i32 0 + %t252 = load ptr, ptr %t251 + %t253 = call ptr @fn_str_concat(ptr @.str808, ptr %t252) + %t254 = call ptr @fn_str_concat(ptr %t253, ptr @.str809) + %t255 = call ptr @fn_emit_bind(ptr %t254) + %t256 = call ptr @fn_val(ptr %t255, ptr @.str810) + store ptr %t256, ptr %retval + br label %ret +ifend32: + %t257 = load ptr, ptr %t0 + %t258 = call i32 @fn_str_eq(ptr %t257, ptr @.str811) + %t259 = icmp ne i32 %t258, 0 + br i1 %t259, label %then33, label %ifend35 +then33: + store i32 1, ptr @g_g_uses_mathrt + %t260 = load ptr, ptr %t1 + %t261 = getelementptr inbounds %Cmp_Node, ptr %t260, i32 0, i32 7 + %t262 = load ptr, ptr %t261 + %t263 = getelementptr inbounds %LSlice, ptr %t262, i32 0, i32 0 + %t264 = load ptr, ptr %t263 + %t265 = getelementptr inbounds ptr, ptr %t264, i32 0 + %t266 = load ptr, ptr %t265 + %t267 = call ptr @fn_emit_expr(ptr %t266) + store ptr %t267, ptr %t268 + %t269 = load ptr, ptr %t268 + %t270 = getelementptr inbounds %Cmp_Val, ptr %t269, i32 0, i32 0 + %t271 = load ptr, ptr %t270 + %t272 = call ptr @fn_str_concat(ptr @.str812, ptr %t271) + %t273 = call ptr @fn_str_concat(ptr %t272, ptr @.str813) + %t274 = call ptr @fn_emit_bind(ptr %t273) + store ptr %t274, ptr %t275 + %t276 = load ptr, ptr %t275 + %t277 = call ptr @fn_str_concat(ptr @.str814, ptr %t276) + %t278 = call ptr @fn_str_concat(ptr %t277, ptr @.str815) + %t279 = call ptr @fn_emit_bind(ptr %t278) + %t280 = call ptr @fn_val(ptr %t279, ptr @.str816) + store ptr %t280, ptr %retval + br label %ret +ifend35: + %t281 = load ptr, ptr %t0 + %t282 = call i32 @fn_str_eq(ptr %t281, ptr @.str817) + %t283 = icmp ne i32 %t282, 0 + br i1 %t283, label %then36, label %ifend38 +then36: + store i32 1, ptr @g_g_uses_mathrt + %t284 = load ptr, ptr %t1 + %t285 = getelementptr inbounds %Cmp_Node, ptr %t284, i32 0, i32 7 + %t286 = load ptr, ptr %t285 + %t287 = getelementptr inbounds %LSlice, ptr %t286, i32 0, i32 0 + %t288 = load ptr, ptr %t287 + %t289 = getelementptr inbounds ptr, ptr %t288, i32 0 + %t290 = load ptr, ptr %t289 + %t291 = call ptr @fn_emit_expr(ptr %t290) + store ptr %t291, ptr %t292 + %t293 = load ptr, ptr %t292 + %t294 = getelementptr inbounds %Cmp_Val, ptr %t293, i32 0, i32 0 + %t295 = load ptr, ptr %t294 + %t296 = call ptr @fn_str_concat(ptr @.str818, ptr %t295) + %t297 = call ptr @fn_str_concat(ptr %t296, ptr @.str819) + %t298 = call ptr @fn_emit_bind(ptr %t297) + store ptr %t298, ptr %t299 + %t300 = load ptr, ptr %t292 + %t301 = getelementptr inbounds %Cmp_Val, ptr %t300, i32 0, i32 0 + %t302 = load ptr, ptr %t301 + %t303 = call ptr @fn_str_concat(ptr @.str820, ptr %t302) + %t304 = call ptr @fn_str_concat(ptr %t303, ptr @.str821) + %t305 = call ptr @fn_emit_bind(ptr %t304) + store ptr %t305, ptr %t306 + %t307 = load ptr, ptr %t306 + %t308 = call ptr @fn_str_concat(ptr @.str822, ptr %t307) + %t309 = call ptr @fn_str_concat(ptr %t308, ptr @.str823) + %t310 = call ptr @fn_emit_bind(ptr %t309) + store ptr %t310, ptr %t311 + %t312 = load ptr, ptr %t299 + %t313 = load ptr, ptr %t311 + %t314 = call ptr @fn_fx_div_code(ptr %t312, ptr %t313) + %t315 = call ptr @fn_val(ptr %t314, ptr @.str824) + store ptr %t315, ptr %retval + br label %ret +ifend38: + %t316 = load ptr, ptr %t0 + %t317 = call i32 @fn_str_eq(ptr %t316, ptr @.str825) + %t318 = icmp ne i32 %t317, 0 + br i1 %t318, label %then39, label %ifend41 +then39: + store i32 1, ptr @g_g_uses_mathrt + %t319 = load ptr, ptr %t1 + %t320 = getelementptr inbounds %Cmp_Node, ptr %t319, i32 0, i32 7 + %t321 = load ptr, ptr %t320 + %t322 = getelementptr inbounds %LSlice, ptr %t321, i32 0, i32 0 + %t323 = load ptr, ptr %t322 + %t324 = getelementptr inbounds ptr, ptr %t323, i32 0 + %t325 = load ptr, ptr %t324 + %t326 = call ptr @fn_emit_expr(ptr %t325) + store ptr %t326, ptr %t327 + %t328 = load ptr, ptr %t1 + %t329 = getelementptr inbounds %Cmp_Node, ptr %t328, i32 0, i32 7 + %t330 = load ptr, ptr %t329 + %t331 = getelementptr inbounds %LSlice, ptr %t330, i32 0, i32 0 + %t332 = load ptr, ptr %t331 + %t333 = getelementptr inbounds ptr, ptr %t332, i32 1 + %t334 = load ptr, ptr %t333 + %t335 = call ptr @fn_emit_expr(ptr %t334) + store ptr %t335, ptr %t336 + %t337 = load ptr, ptr %t327 + %t338 = getelementptr inbounds %Cmp_Val, ptr %t337, i32 0, i32 0 + %t339 = load ptr, ptr %t338 + %t340 = call ptr @fn_str_concat(ptr @.str826, ptr %t339) + %t341 = call ptr @fn_str_concat(ptr %t340, ptr @.str827) + %t342 = load ptr, ptr %t336 + %t343 = getelementptr inbounds %Cmp_Val, ptr %t342, i32 0, i32 0 + %t344 = load ptr, ptr %t343 + %t345 = call ptr @fn_str_concat(ptr %t341, ptr %t344) + %t346 = call ptr @fn_str_concat(ptr %t345, ptr @.str828) + %t347 = call ptr @fn_emit_bind(ptr %t346) + %t348 = call ptr @fn_val(ptr %t347, ptr @.str829) + store ptr %t348, ptr %retval + br label %ret +ifend41: + %t349 = load ptr, ptr %t0 + %t350 = call i32 @fn_str_eq(ptr %t349, ptr @.str830) + %t351 = icmp ne i32 %t350, 0 + br i1 %t351, label %then42, label %ifend44 +then42: + store i32 1, ptr @g_g_uses_mathrt + %t352 = load ptr, ptr %t1 + %t353 = getelementptr inbounds %Cmp_Node, ptr %t352, i32 0, i32 7 + %t354 = load ptr, ptr %t353 + %t355 = getelementptr inbounds %LSlice, ptr %t354, i32 0, i32 0 + %t356 = load ptr, ptr %t355 + %t357 = getelementptr inbounds ptr, ptr %t356, i32 0 + %t358 = load ptr, ptr %t357 + %t359 = call ptr @fn_emit_expr(ptr %t358) + store ptr %t359, ptr %t360 + %t361 = load ptr, ptr %t360 + %t362 = getelementptr inbounds %Cmp_Val, ptr %t361, i32 0, i32 0 + %t363 = load ptr, ptr %t362 + %t364 = load ptr, ptr %t360 + %t365 = getelementptr inbounds %Cmp_Val, ptr %t364, i32 0, i32 0 + %t366 = load ptr, ptr %t365 + %t367 = call ptr @fn_fx_mul_code(ptr %t363, ptr %t366) + store ptr %t367, ptr %t368 + %t369 = load ptr, ptr %t368 + %t370 = call ptr @fn_str_concat(ptr @.str831, ptr %t369) + %t371 = call ptr @fn_emit_bind(ptr %t370) + store ptr %t371, ptr %t372 + %t373 = load ptr, ptr %t372 + %t374 = call ptr @fn_str_concat(ptr @.str832, ptr %t373) + %t375 = call ptr @fn_str_concat(ptr %t374, ptr @.str833) + %t376 = call ptr @fn_emit_bind(ptr %t375) + store ptr %t376, ptr %t377 + %t378 = load ptr, ptr %t360 + %t379 = getelementptr inbounds %Cmp_Val, ptr %t378, i32 0, i32 0 + %t380 = load ptr, ptr %t379 + %t381 = call ptr @fn_str_concat(ptr @.str834, ptr %t380) + %t382 = call ptr @fn_str_concat(ptr %t381, ptr @.str835) + %t383 = load ptr, ptr %t377 + %t384 = call ptr @fn_str_concat(ptr %t382, ptr %t383) + %t385 = call ptr @fn_str_concat(ptr %t384, ptr @.str836) + %t386 = call ptr @fn_emit_bind(ptr %t385) + %t387 = call ptr @fn_val(ptr %t386, ptr @.str837) + store ptr %t387, ptr %retval + br label %ret +ifend44: + %t388 = load ptr, ptr %t0 + %t389 = call i32 @fn_str_eq(ptr %t388, ptr @.str838) + %t390 = icmp ne i32 %t389, 0 + br i1 %t390, label %then45, label %ifend47 +then45: + store i32 1, ptr @g_g_uses_mathrt + %t391 = load ptr, ptr %t1 + %t392 = getelementptr inbounds %Cmp_Node, ptr %t391, i32 0, i32 7 + %t393 = load ptr, ptr %t392 + %t394 = getelementptr inbounds %LSlice, ptr %t393, i32 0, i32 0 + %t395 = load ptr, ptr %t394 + %t396 = getelementptr inbounds ptr, ptr %t395, i32 0 + %t397 = load ptr, ptr %t396 + %t398 = call ptr @fn_emit_expr(ptr %t397) + store ptr %t398, ptr %t399 + %t400 = load ptr, ptr %t399 + %t401 = getelementptr inbounds %Cmp_Val, ptr %t400, i32 0, i32 0 + %t402 = load ptr, ptr %t401 + %t403 = load ptr, ptr %t399 + %t404 = getelementptr inbounds %Cmp_Val, ptr %t403, i32 0, i32 0 + %t405 = load ptr, ptr %t404 + %t406 = call ptr @fn_fx_mul_code(ptr %t402, ptr %t405) + store ptr %t406, ptr %t407 + %t408 = load ptr, ptr %t407 + %t409 = call ptr @fn_str_concat(ptr @.str839, ptr %t408) + %t410 = call ptr @fn_emit_bind(ptr %t409) + store ptr %t410, ptr %t411 + %t412 = load ptr, ptr %t411 + %t413 = call ptr @fn_str_concat(ptr @.str840, ptr %t412) + %t414 = call ptr @fn_str_concat(ptr %t413, ptr @.str841) + %t415 = call ptr @fn_emit_bind(ptr %t414) + store ptr %t415, ptr %t416 + %t417 = load ptr, ptr %t416 + %t418 = call ptr @fn_str_concat(ptr @.str842, ptr %t417) + %t419 = call ptr @fn_str_concat(ptr %t418, ptr @.str843) + %t420 = load ptr, ptr %t399 + %t421 = getelementptr inbounds %Cmp_Val, ptr %t420, i32 0, i32 0 + %t422 = load ptr, ptr %t421 + %t423 = call ptr @fn_str_concat(ptr %t419, ptr %t422) + %t424 = call ptr @fn_str_concat(ptr %t423, ptr @.str844) + %t425 = call ptr @fn_emit_bind(ptr %t424) + %t426 = call ptr @fn_val(ptr %t425, ptr @.str845) + store ptr %t426, ptr %retval + br label %ret +ifend47: + %t427 = load ptr, ptr %t0 + %t428 = call i32 @fn_str_eq(ptr %t427, ptr @.str846) + %t429 = icmp ne i32 %t428, 0 + br i1 %t429, label %then48, label %ifend50 +then48: + store i32 1, ptr @g_g_uses_mathrt + %t430 = load ptr, ptr %t1 + %t431 = getelementptr inbounds %Cmp_Node, ptr %t430, i32 0, i32 7 + %t432 = load ptr, ptr %t431 + %t433 = getelementptr inbounds %LSlice, ptr %t432, i32 0, i32 0 + %t434 = load ptr, ptr %t433 + %t435 = getelementptr inbounds ptr, ptr %t434, i32 0 + %t436 = load ptr, ptr %t435 + %t437 = call ptr @fn_emit_expr(ptr %t436) + store ptr %t437, ptr %t438 + %t439 = load ptr, ptr %t1 + %t440 = getelementptr inbounds %Cmp_Node, ptr %t439, i32 0, i32 7 + %t441 = load ptr, ptr %t440 + %t442 = getelementptr inbounds %LSlice, ptr %t441, i32 0, i32 0 + %t443 = load ptr, ptr %t442 + %t444 = getelementptr inbounds ptr, ptr %t443, i32 1 + %t445 = load ptr, ptr %t444 + %t446 = call ptr @fn_emit_expr(ptr %t445) + store ptr %t446, ptr %t447 + %t448 = load ptr, ptr %t438 + %t449 = getelementptr inbounds %Cmp_Val, ptr %t448, i32 0, i32 0 + %t450 = load ptr, ptr %t449 + %t451 = load ptr, ptr %t438 + %t452 = getelementptr inbounds %Cmp_Val, ptr %t451, i32 0, i32 0 + %t453 = load ptr, ptr %t452 + %t454 = call ptr @fn_fx_mul_code(ptr %t450, ptr %t453) + store ptr %t454, ptr %t455 + %t456 = load ptr, ptr %t447 + %t457 = getelementptr inbounds %Cmp_Val, ptr %t456, i32 0, i32 0 + %t458 = load ptr, ptr %t457 + %t459 = load ptr, ptr %t447 + %t460 = getelementptr inbounds %Cmp_Val, ptr %t459, i32 0, i32 0 + %t461 = load ptr, ptr %t460 + %t462 = call ptr @fn_fx_mul_code(ptr %t458, ptr %t461) + store ptr %t462, ptr %t463 + %t464 = load ptr, ptr %t455 + %t465 = call ptr @fn_str_concat(ptr @.str847, ptr %t464) + %t466 = call ptr @fn_str_concat(ptr %t465, ptr @.str848) + %t467 = load ptr, ptr %t463 + %t468 = call ptr @fn_str_concat(ptr %t466, ptr %t467) + %t469 = call ptr @fn_emit_bind(ptr %t468) + store ptr %t469, ptr %t470 + %t471 = load ptr, ptr %t470 + %t472 = call ptr @fn_str_concat(ptr @.str849, ptr %t471) + %t473 = call ptr @fn_str_concat(ptr %t472, ptr @.str850) + %t474 = call ptr @fn_emit_bind(ptr %t473) + %t475 = call ptr @fn_val(ptr %t474, ptr @.str851) + store ptr %t475, ptr %retval + br label %ret +ifend50: + %t476 = load ptr, ptr %t0 + %t477 = call i32 @fn_str_eq(ptr %t476, ptr @.str852) + %t478 = icmp ne i32 %t477, 0 + br i1 %t478, label %then51, label %ifend53 +then51: + %t479 = load ptr, ptr %t1 + %t480 = getelementptr inbounds %Cmp_Node, ptr %t479, i32 0, i32 7 + %t481 = load ptr, ptr %t480 + %t482 = getelementptr inbounds %LSlice, ptr %t481, i32 0, i32 0 + %t483 = load ptr, ptr %t482 + %t484 = getelementptr inbounds ptr, ptr %t483, i32 0 + %t485 = load ptr, ptr %t484 + %t486 = call ptr @fn_emit_expr(ptr %t485) + store ptr %t486, ptr %t487 + %t488 = load ptr, ptr %t1 + %t489 = getelementptr inbounds %Cmp_Node, ptr %t488, i32 0, i32 7 + %t490 = load ptr, ptr %t489 + %t491 = getelementptr inbounds %LSlice, ptr %t490, i32 0, i32 0 + %t492 = load ptr, ptr %t491 + %t493 = getelementptr inbounds ptr, ptr %t492, i32 1 + %t494 = load ptr, ptr %t493 + %t495 = call ptr @fn_emit_expr(ptr %t494) + store ptr %t495, ptr %t496 + %t497 = load ptr, ptr %t1 + %t498 = getelementptr inbounds %Cmp_Node, ptr %t497, i32 0, i32 7 + %t499 = load ptr, ptr %t498 + %t500 = getelementptr inbounds %LSlice, ptr %t499, i32 0, i32 0 + %t501 = load ptr, ptr %t500 + %t502 = getelementptr inbounds ptr, ptr %t501, i32 2 + %t503 = load ptr, ptr %t502 + %t504 = call ptr @fn_emit_expr(ptr %t503) + store ptr %t504, ptr %t505 + %t506 = load ptr, ptr %t1 + %t507 = getelementptr inbounds %Cmp_Node, ptr %t506, i32 0, i32 7 + %t508 = load ptr, ptr %t507 + %t509 = getelementptr inbounds %LSlice, ptr %t508, i32 0, i32 0 + %t510 = load ptr, ptr %t509 + %t511 = getelementptr inbounds ptr, ptr %t510, i32 3 + %t512 = load ptr, ptr %t511 + %t513 = call ptr @fn_emit_expr(ptr %t512) + store ptr %t513, ptr %t514 + %t515 = load ptr, ptr %t505 + %t516 = getelementptr inbounds %Cmp_Val, ptr %t515, i32 0, i32 0 + %t517 = load ptr, ptr %t516 + %t518 = call ptr @fn_str_concat(ptr @.str853, ptr %t517) + %t519 = call ptr @fn_str_concat(ptr %t518, ptr @.str854) + %t520 = load ptr, ptr %t487 + %t521 = getelementptr inbounds %Cmp_Val, ptr %t520, i32 0, i32 0 + %t522 = load ptr, ptr %t521 + %t523 = call ptr @fn_str_concat(ptr %t519, ptr %t522) + %t524 = call ptr @fn_emit_bind(ptr %t523) + store ptr %t524, ptr %t525 + %t526 = load ptr, ptr %t514 + %t527 = getelementptr inbounds %Cmp_Val, ptr %t526, i32 0, i32 0 + %t528 = load ptr, ptr %t527 + %t529 = call ptr @fn_str_concat(ptr @.str855, ptr %t528) + %t530 = call ptr @fn_str_concat(ptr %t529, ptr @.str856) + %t531 = load ptr, ptr %t496 + %t532 = getelementptr inbounds %Cmp_Val, ptr %t531, i32 0, i32 0 + %t533 = load ptr, ptr %t532 + %t534 = call ptr @fn_str_concat(ptr %t530, ptr %t533) + %t535 = call ptr @fn_emit_bind(ptr %t534) + store ptr %t535, ptr %t536 + %t537 = load ptr, ptr %t525 + %t538 = load ptr, ptr %t525 + %t539 = call ptr @fn_fx_mul_code(ptr %t537, ptr %t538) + store ptr %t539, ptr %t540 + %t541 = load ptr, ptr %t536 + %t542 = load ptr, ptr %t536 + %t543 = call ptr @fn_fx_mul_code(ptr %t541, ptr %t542) + store ptr %t543, ptr %t544 + %t545 = load ptr, ptr %t540 + %t546 = call ptr @fn_str_concat(ptr @.str857, ptr %t545) + %t547 = call ptr @fn_str_concat(ptr %t546, ptr @.str858) + %t548 = load ptr, ptr %t544 + %t549 = call ptr @fn_str_concat(ptr %t547, ptr %t548) + %t550 = call ptr @fn_emit_bind(ptr %t549) + %t551 = call ptr @fn_val(ptr %t550, ptr @.str859) + store ptr %t551, ptr %retval + br label %ret +ifend53: + %t552 = load ptr, ptr %t0 + %t553 = call i32 @fn_str_eq(ptr %t552, ptr @.str860) + %t554 = icmp ne i32 %t553, 0 + br i1 %t554, label %then54, label %ifend56 +then54: + store i32 1, ptr @g_g_uses_mathrt + %t555 = load ptr, ptr %t1 + %t556 = getelementptr inbounds %Cmp_Node, ptr %t555, i32 0, i32 7 + %t557 = load ptr, ptr %t556 + %t558 = getelementptr inbounds %LSlice, ptr %t557, i32 0, i32 0 + %t559 = load ptr, ptr %t558 + %t560 = getelementptr inbounds ptr, ptr %t559, i32 0 + %t561 = load ptr, ptr %t560 + %t562 = call ptr @fn_emit_expr(ptr %t561) + store ptr %t562, ptr %t563 + %t564 = load ptr, ptr %t1 + %t565 = getelementptr inbounds %Cmp_Node, ptr %t564, i32 0, i32 7 + %t566 = load ptr, ptr %t565 + %t567 = getelementptr inbounds %LSlice, ptr %t566, i32 0, i32 0 + %t568 = load ptr, ptr %t567 + %t569 = getelementptr inbounds ptr, ptr %t568, i32 1 + %t570 = load ptr, ptr %t569 + %t571 = call ptr @fn_emit_expr(ptr %t570) + store ptr %t571, ptr %t572 + %t573 = load ptr, ptr %t1 + %t574 = getelementptr inbounds %Cmp_Node, ptr %t573, i32 0, i32 7 + %t575 = load ptr, ptr %t574 + %t576 = getelementptr inbounds %LSlice, ptr %t575, i32 0, i32 0 + %t577 = load ptr, ptr %t576 + %t578 = getelementptr inbounds ptr, ptr %t577, i32 2 + %t579 = load ptr, ptr %t578 + %t580 = call ptr @fn_emit_expr(ptr %t579) + store ptr %t580, ptr %t581 + %t582 = load ptr, ptr %t1 + %t583 = getelementptr inbounds %Cmp_Node, ptr %t582, i32 0, i32 7 + %t584 = load ptr, ptr %t583 + %t585 = getelementptr inbounds %LSlice, ptr %t584, i32 0, i32 0 + %t586 = load ptr, ptr %t585 + %t587 = getelementptr inbounds ptr, ptr %t586, i32 3 + %t588 = load ptr, ptr %t587 + %t589 = call ptr @fn_emit_expr(ptr %t588) + store ptr %t589, ptr %t590 + %t591 = load ptr, ptr %t581 + %t592 = getelementptr inbounds %Cmp_Val, ptr %t591, i32 0, i32 0 + %t593 = load ptr, ptr %t592 + %t594 = call ptr @fn_str_concat(ptr @.str861, ptr %t593) + %t595 = call ptr @fn_str_concat(ptr %t594, ptr @.str862) + %t596 = load ptr, ptr %t563 + %t597 = getelementptr inbounds %Cmp_Val, ptr %t596, i32 0, i32 0 + %t598 = load ptr, ptr %t597 + %t599 = call ptr @fn_str_concat(ptr %t595, ptr %t598) + %t600 = call ptr @fn_emit_bind(ptr %t599) + store ptr %t600, ptr %t601 + %t602 = load ptr, ptr %t590 + %t603 = getelementptr inbounds %Cmp_Val, ptr %t602, i32 0, i32 0 + %t604 = load ptr, ptr %t603 + %t605 = call ptr @fn_str_concat(ptr @.str863, ptr %t604) + %t606 = call ptr @fn_str_concat(ptr %t605, ptr @.str864) + %t607 = load ptr, ptr %t572 + %t608 = getelementptr inbounds %Cmp_Val, ptr %t607, i32 0, i32 0 + %t609 = load ptr, ptr %t608 + %t610 = call ptr @fn_str_concat(ptr %t606, ptr %t609) + %t611 = call ptr @fn_emit_bind(ptr %t610) + store ptr %t611, ptr %t612 + %t613 = load ptr, ptr %t601 + %t614 = load ptr, ptr %t601 + %t615 = call ptr @fn_fx_mul_code(ptr %t613, ptr %t614) + store ptr %t615, ptr %t616 + %t617 = load ptr, ptr %t612 + %t618 = load ptr, ptr %t612 + %t619 = call ptr @fn_fx_mul_code(ptr %t617, ptr %t618) + store ptr %t619, ptr %t620 + %t621 = load ptr, ptr %t616 + %t622 = call ptr @fn_str_concat(ptr @.str865, ptr %t621) + %t623 = call ptr @fn_str_concat(ptr %t622, ptr @.str866) + %t624 = load ptr, ptr %t620 + %t625 = call ptr @fn_str_concat(ptr %t623, ptr %t624) + %t626 = call ptr @fn_emit_bind(ptr %t625) + store ptr %t626, ptr %t627 + %t628 = load ptr, ptr %t627 + %t629 = call ptr @fn_str_concat(ptr @.str867, ptr %t628) + %t630 = call ptr @fn_str_concat(ptr %t629, ptr @.str868) + %t631 = call ptr @fn_emit_bind(ptr %t630) + %t632 = call ptr @fn_val(ptr %t631, ptr @.str869) + store ptr %t632, ptr %retval + br label %ret +ifend56: + %t633 = load ptr, ptr %t0 + %t634 = call i32 @fn_str_eq(ptr %t633, ptr @.str870) + %t635 = icmp ne i32 %t634, 0 + br i1 %t635, label %then57, label %ifend59 +then57: + %t636 = load ptr, ptr %t1 + %t637 = getelementptr inbounds %Cmp_Node, ptr %t636, i32 0, i32 7 + %t638 = load ptr, ptr %t637 + %t639 = getelementptr inbounds %LSlice, ptr %t638, i32 0, i32 0 + %t640 = load ptr, ptr %t639 + %t641 = getelementptr inbounds ptr, ptr %t640, i32 0 + %t642 = load ptr, ptr %t641 + %t643 = call ptr @fn_emit_expr(ptr %t642) + store ptr %t643, ptr %t644 + %t645 = load ptr, ptr %t644 + %t646 = getelementptr inbounds %Cmp_Val, ptr %t645, i32 0, i32 0 + %t647 = load ptr, ptr %t646 + %t648 = call ptr @fn_fx_mul_code(ptr %t647, ptr @.str871) + %t649 = call ptr @fn_val(ptr %t648, ptr @.str872) + store ptr %t649, ptr %retval + br label %ret +ifend59: + %t650 = load ptr, ptr %t0 + %t651 = call i32 @fn_str_eq(ptr %t650, ptr @.str873) + %t652 = icmp ne i32 %t651, 0 + br i1 %t652, label %then60, label %ifend62 +then60: + %t653 = load ptr, ptr %t1 + %t654 = getelementptr inbounds %Cmp_Node, ptr %t653, i32 0, i32 7 + %t655 = load ptr, ptr %t654 + %t656 = getelementptr inbounds %LSlice, ptr %t655, i32 0, i32 0 + %t657 = load ptr, ptr %t656 + %t658 = getelementptr inbounds ptr, ptr %t657, i32 0 + %t659 = load ptr, ptr %t658 + %t660 = call ptr @fn_emit_expr(ptr %t659) + store ptr %t660, ptr %t661 + %t662 = load ptr, ptr %t661 + %t663 = getelementptr inbounds %Cmp_Val, ptr %t662, i32 0, i32 0 + %t664 = load ptr, ptr %t663 + %t665 = call ptr @fn_fx_mul_code(ptr %t664, ptr @.str874) + %t666 = call ptr @fn_val(ptr %t665, ptr @.str875) + store ptr %t666, ptr %retval + br label %ret +ifend62: + %t667 = load ptr, ptr %t0 + %t668 = call i32 @fn_str_eq(ptr %t667, ptr @.str876) + %t669 = icmp ne i32 %t668, 0 + br i1 %t669, label %then63, label %ifend65 +then63: + %t670 = load ptr, ptr %t1 + %t671 = getelementptr inbounds %Cmp_Node, ptr %t670, i32 0, i32 7 + %t672 = load ptr, ptr %t671 + %t673 = getelementptr inbounds %LSlice, ptr %t672, i32 0, i32 0 + %t674 = load ptr, ptr %t673 + %t675 = getelementptr inbounds ptr, ptr %t674, i32 0 + %t676 = load ptr, ptr %t675 + %t677 = call ptr @fn_emit_expr(ptr %t676) + store ptr %t677, ptr %t678 + %t679 = load ptr, ptr %t1 + %t680 = getelementptr inbounds %Cmp_Node, ptr %t679, i32 0, i32 7 + %t681 = load ptr, ptr %t680 + %t682 = getelementptr inbounds %LSlice, ptr %t681, i32 0, i32 0 + %t683 = load ptr, ptr %t682 + %t684 = getelementptr inbounds ptr, ptr %t683, i32 1 + %t685 = load ptr, ptr %t684 + %t686 = call ptr @fn_emit_expr(ptr %t685) + store ptr %t686, ptr %t687 + %t688 = load ptr, ptr %t678 + %t689 = getelementptr inbounds %Cmp_Val, ptr %t688, i32 0, i32 0 + %t690 = load ptr, ptr %t689 + %t691 = call ptr @fn_str_concat(ptr @.str877, ptr %t690) + %t692 = call ptr @fn_str_concat(ptr %t691, ptr @.str878) + %t693 = load ptr, ptr %t687 + %t694 = getelementptr inbounds %Cmp_Val, ptr %t693, i32 0, i32 0 + %t695 = load ptr, ptr %t694 + %t696 = call ptr @fn_str_concat(ptr %t692, ptr %t695) + %t697 = call ptr @fn_emit_bind(ptr %t696) + store ptr %t697, ptr %t698 + %t699 = load ptr, ptr %t698 + %t700 = call ptr @fn_str_concat(ptr @.str879, ptr %t699) + %t701 = call ptr @fn_str_concat(ptr %t700, ptr @.str880) + %t702 = load ptr, ptr %t687 + %t703 = getelementptr inbounds %Cmp_Val, ptr %t702, i32 0, i32 0 + %t704 = load ptr, ptr %t703 + %t705 = call ptr @fn_str_concat(ptr %t701, ptr %t704) + %t706 = call ptr @fn_emit_bind(ptr %t705) + store ptr %t706, ptr %t707 + %t708 = load ptr, ptr %t707 + %t709 = call ptr @fn_str_concat(ptr @.str881, ptr %t708) + %t710 = call ptr @fn_str_concat(ptr %t709, ptr @.str882) + %t711 = load ptr, ptr %t687 + %t712 = getelementptr inbounds %Cmp_Val, ptr %t711, i32 0, i32 0 + %t713 = load ptr, ptr %t712 + %t714 = call ptr @fn_str_concat(ptr %t710, ptr %t713) + %t715 = call ptr @fn_emit_bind(ptr %t714) + %t716 = call ptr @fn_val(ptr %t715, ptr @.str883) + store ptr %t716, ptr %retval + br label %ret +ifend65: + %t717 = load ptr, ptr %t0 + %t718 = call i32 @fn_str_eq(ptr %t717, ptr @.str884) + %t719 = icmp ne i32 %t718, 0 + br i1 %t719, label %then66, label %ifend68 +then66: + %t720 = load ptr, ptr %t1 + %t721 = getelementptr inbounds %Cmp_Node, ptr %t720, i32 0, i32 7 + %t722 = load ptr, ptr %t721 + %t723 = getelementptr inbounds %LSlice, ptr %t722, i32 0, i32 0 + %t724 = load ptr, ptr %t723 + %t725 = getelementptr inbounds ptr, ptr %t724, i32 0 + %t726 = load ptr, ptr %t725 + %t727 = call ptr @fn_emit_expr(ptr %t726) + store ptr %t727, ptr %t728 + %t729 = load ptr, ptr %t1 + %t730 = getelementptr inbounds %Cmp_Node, ptr %t729, i32 0, i32 7 + %t731 = load ptr, ptr %t730 + %t732 = getelementptr inbounds %LSlice, ptr %t731, i32 0, i32 0 + %t733 = load ptr, ptr %t732 + %t734 = getelementptr inbounds ptr, ptr %t733, i32 1 + %t735 = load ptr, ptr %t734 + %t736 = call ptr @fn_emit_expr(ptr %t735) + store ptr %t736, ptr %t737 + %t738 = load ptr, ptr %t1 + %t739 = getelementptr inbounds %Cmp_Node, ptr %t738, i32 0, i32 7 + %t740 = load ptr, ptr %t739 + %t741 = getelementptr inbounds %LSlice, ptr %t740, i32 0, i32 0 + %t742 = load ptr, ptr %t741 + %t743 = getelementptr inbounds ptr, ptr %t742, i32 2 + %t744 = load ptr, ptr %t743 + %t745 = call ptr @fn_emit_expr(ptr %t744) + store ptr %t745, ptr %t746 + %t747 = load ptr, ptr %t746 + %t748 = getelementptr inbounds %Cmp_Val, ptr %t747, i32 0, i32 0 + %t749 = load ptr, ptr %t748 + %t750 = call ptr @fn_str_concat(ptr @.str885, ptr %t749) + %t751 = call ptr @fn_str_concat(ptr %t750, ptr @.str886) + %t752 = load ptr, ptr %t737 + %t753 = getelementptr inbounds %Cmp_Val, ptr %t752, i32 0, i32 0 + %t754 = load ptr, ptr %t753 + %t755 = call ptr @fn_str_concat(ptr %t751, ptr %t754) + %t756 = call ptr @fn_emit_bind(ptr %t755) + store ptr %t756, ptr %t757 + %t758 = load ptr, ptr %t728 + %t759 = getelementptr inbounds %Cmp_Val, ptr %t758, i32 0, i32 0 + %t760 = load ptr, ptr %t759 + %t761 = call ptr @fn_str_concat(ptr @.str887, ptr %t760) + %t762 = call ptr @fn_str_concat(ptr %t761, ptr @.str888) + %t763 = load ptr, ptr %t737 + %t764 = getelementptr inbounds %Cmp_Val, ptr %t763, i32 0, i32 0 + %t765 = load ptr, ptr %t764 + %t766 = call ptr @fn_str_concat(ptr %t762, ptr %t765) + %t767 = call ptr @fn_emit_bind(ptr %t766) + store ptr %t767, ptr %t768 + %t769 = load ptr, ptr %t768 + %t770 = call ptr @fn_str_concat(ptr @.str889, ptr %t769) + %t771 = call ptr @fn_str_concat(ptr %t770, ptr @.str890) + %t772 = load ptr, ptr %t757 + %t773 = call ptr @fn_str_concat(ptr %t771, ptr %t772) + %t774 = call ptr @fn_emit_bind(ptr %t773) + store ptr %t774, ptr %t775 + %t776 = load ptr, ptr %t775 + %t777 = call ptr @fn_str_concat(ptr @.str891, ptr %t776) + %t778 = call ptr @fn_str_concat(ptr %t777, ptr @.str892) + %t779 = load ptr, ptr %t757 + %t780 = call ptr @fn_str_concat(ptr %t778, ptr %t779) + %t781 = call ptr @fn_emit_bind(ptr %t780) + store ptr %t781, ptr %t782 + %t783 = load ptr, ptr %t782 + %t784 = call ptr @fn_str_concat(ptr @.str893, ptr %t783) + %t785 = call ptr @fn_str_concat(ptr %t784, ptr @.str894) + %t786 = load ptr, ptr %t757 + %t787 = call ptr @fn_str_concat(ptr %t785, ptr %t786) + %t788 = call ptr @fn_emit_bind(ptr %t787) + store ptr %t788, ptr %t789 + %t790 = load ptr, ptr %t737 + %t791 = getelementptr inbounds %Cmp_Val, ptr %t790, i32 0, i32 0 + %t792 = load ptr, ptr %t791 + %t793 = call ptr @fn_str_concat(ptr @.str895, ptr %t792) + %t794 = call ptr @fn_str_concat(ptr %t793, ptr @.str896) + %t795 = load ptr, ptr %t789 + %t796 = call ptr @fn_str_concat(ptr %t794, ptr %t795) + %t797 = call ptr @fn_emit_bind(ptr %t796) + %t798 = call ptr @fn_val(ptr %t797, ptr @.str897) + store ptr %t798, ptr %retval + br label %ret +ifend68: + %t799 = load ptr, ptr %t0 + %t800 = call i32 @fn_str_eq(ptr %t799, ptr @.str898) + %t801 = icmp ne i32 %t800, 0 + br i1 %t801, label %then69, label %ifend71 +then69: + %t802 = load ptr, ptr %t1 + %t803 = getelementptr inbounds %Cmp_Node, ptr %t802, i32 0, i32 7 + %t804 = load ptr, ptr %t803 + %t805 = getelementptr inbounds %LSlice, ptr %t804, i32 0, i32 0 + %t806 = load ptr, ptr %t805 + %t807 = getelementptr inbounds ptr, ptr %t806, i32 0 + %t808 = load ptr, ptr %t807 + %t809 = call ptr @fn_emit_expr(ptr %t808) + store ptr %t809, ptr %t810 + %t811 = load ptr, ptr %t1 + %t812 = getelementptr inbounds %Cmp_Node, ptr %t811, i32 0, i32 7 + %t813 = load ptr, ptr %t812 + %t814 = getelementptr inbounds %LSlice, ptr %t813, i32 0, i32 0 + %t815 = load ptr, ptr %t814 + %t816 = getelementptr inbounds ptr, ptr %t815, i32 1 + %t817 = load ptr, ptr %t816 + %t818 = call ptr @fn_emit_expr(ptr %t817) + store ptr %t818, ptr %t819 + %t820 = load ptr, ptr %t819 + %t821 = getelementptr inbounds %Cmp_Val, ptr %t820, i32 0, i32 0 + %t822 = load ptr, ptr %t821 + %t823 = call ptr @fn_str_concat(ptr @.str899, ptr %t822) + %t824 = call ptr @fn_str_concat(ptr %t823, ptr @.str900) + %t825 = call ptr @fn_emit_bind(ptr %t824) + store ptr %t825, ptr %t826 + %t827 = load ptr, ptr %t810 + %t828 = getelementptr inbounds %Cmp_Val, ptr %t827, i32 0, i32 0 + %t829 = load ptr, ptr %t828 + %t830 = call ptr @fn_str_concat(ptr @.str901, ptr %t829) + %t831 = call ptr @fn_str_concat(ptr %t830, ptr @.str902) + %t832 = load ptr, ptr %t826 + %t833 = call ptr @fn_str_concat(ptr %t831, ptr %t832) + %t834 = call ptr @fn_emit_bind(ptr %t833) + store ptr %t834, ptr %t835 + %t836 = load ptr, ptr %t835 + %t837 = call ptr @fn_str_concat(ptr @.str903, ptr %t836) + %t838 = call ptr @fn_str_concat(ptr %t837, ptr @.str904) + %t839 = load ptr, ptr %t826 + %t840 = call ptr @fn_str_concat(ptr %t838, ptr %t839) + %t841 = call ptr @fn_emit_bind(ptr %t840) + store ptr %t841, ptr %t842 + %t843 = load ptr, ptr %t842 + %t844 = call ptr @fn_str_concat(ptr @.str905, ptr %t843) + %t845 = call ptr @fn_str_concat(ptr %t844, ptr @.str906) + %t846 = load ptr, ptr %t826 + %t847 = call ptr @fn_str_concat(ptr %t845, ptr %t846) + %t848 = call ptr @fn_emit_bind(ptr %t847) + store ptr %t848, ptr %t849 + %t850 = load ptr, ptr %t849 + %t851 = call ptr @fn_str_concat(ptr @.str907, ptr %t850) + %t852 = call ptr @fn_str_concat(ptr %t851, ptr @.str908) + %t853 = load ptr, ptr %t819 + %t854 = getelementptr inbounds %Cmp_Val, ptr %t853, i32 0, i32 0 + %t855 = load ptr, ptr %t854 + %t856 = call ptr @fn_str_concat(ptr %t852, ptr %t855) + %t857 = call ptr @fn_emit_bind(ptr %t856) + store ptr %t857, ptr %t858 + %t859 = load ptr, ptr %t858 + %t860 = call ptr @fn_str_concat(ptr @.str909, ptr %t859) + %t861 = call ptr @fn_emit_bind(ptr %t860) + store ptr %t861, ptr %t862 + %t863 = load ptr, ptr %t858 + %t864 = call ptr @fn_str_concat(ptr @.str910, ptr %t863) + %t865 = call ptr @fn_str_concat(ptr %t864, ptr @.str911) + %t866 = call ptr @fn_emit_bind(ptr %t865) + store ptr %t866, ptr %t867 + %t868 = load ptr, ptr %t867 + %t869 = call ptr @fn_str_concat(ptr @.str912, ptr %t868) + %t870 = call ptr @fn_str_concat(ptr %t869, ptr @.str913) + %t871 = load ptr, ptr %t862 + %t872 = call ptr @fn_str_concat(ptr %t870, ptr %t871) + %t873 = call ptr @fn_str_concat(ptr %t872, ptr @.str914) + %t874 = load ptr, ptr %t858 + %t875 = call ptr @fn_str_concat(ptr %t873, ptr %t874) + %t876 = call ptr @fn_emit_bind(ptr %t875) + store ptr %t876, ptr %t877 + %t878 = load ptr, ptr %t819 + %t879 = getelementptr inbounds %Cmp_Val, ptr %t878, i32 0, i32 0 + %t880 = load ptr, ptr %t879 + %t881 = call ptr @fn_str_concat(ptr @.str915, ptr %t880) + %t882 = call ptr @fn_str_concat(ptr %t881, ptr @.str916) + %t883 = load ptr, ptr %t877 + %t884 = call ptr @fn_str_concat(ptr %t882, ptr %t883) + %t885 = call ptr @fn_emit_bind(ptr %t884) + %t886 = call ptr @fn_val(ptr %t885, ptr @.str917) + store ptr %t886, ptr %retval + br label %ret +ifend71: + %t887 = load ptr, ptr %t0 + %t888 = call i32 @fn_str_eq(ptr %t887, ptr @.str918) + %t889 = icmp ne i32 %t888, 0 + br i1 %t889, label %then72, label %ifend74 +then72: + %t890 = load ptr, ptr %t1 + %t891 = getelementptr inbounds %Cmp_Node, ptr %t890, i32 0, i32 7 + %t892 = load ptr, ptr %t891 + %t893 = getelementptr inbounds %LSlice, ptr %t892, i32 0, i32 0 + %t894 = load ptr, ptr %t893 + %t895 = getelementptr inbounds ptr, ptr %t894, i32 0 + %t896 = load ptr, ptr %t895 + %t897 = call ptr @fn_emit_expr(ptr %t896) + store ptr %t897, ptr %t898 + %t899 = load ptr, ptr %t1 + %t900 = getelementptr inbounds %Cmp_Node, ptr %t899, i32 0, i32 7 + %t901 = load ptr, ptr %t900 + %t902 = getelementptr inbounds %LSlice, ptr %t901, i32 0, i32 0 + %t903 = load ptr, ptr %t902 + %t904 = getelementptr inbounds ptr, ptr %t903, i32 1 + %t905 = load ptr, ptr %t904 + %t906 = call ptr @fn_emit_expr(ptr %t905) + store ptr %t906, ptr %t907 + %t908 = load ptr, ptr %t898 + %t909 = getelementptr inbounds %Cmp_Val, ptr %t908, i32 0, i32 0 + %t910 = load ptr, ptr %t909 + %t911 = load ptr, ptr %t907 + %t912 = getelementptr inbounds %Cmp_Val, ptr %t911, i32 0, i32 0 + %t913 = load ptr, ptr %t912 + %t914 = call ptr @fn_fx_div_code(ptr %t910, ptr %t913) + store ptr %t914, ptr %t915 + %t916 = load ptr, ptr %t915 + %t917 = call ptr @fn_str_concat(ptr @.str919, ptr %t916) + %t918 = call ptr @fn_str_concat(ptr %t917, ptr @.str920) + %t919 = call ptr @fn_emit_bind(ptr %t918) + store ptr %t919, ptr %t920 + %t921 = load ptr, ptr %t920 + %t922 = call ptr @fn_str_concat(ptr @.str921, ptr %t921) + %t923 = call ptr @fn_str_concat(ptr %t922, ptr @.str922) + %t924 = call ptr @fn_emit_bind(ptr %t923) + store ptr %t924, ptr %t925 + %t926 = load ptr, ptr %t925 + %t927 = call ptr @fn_str_concat(ptr @.str923, ptr %t926) + %t928 = call ptr @fn_str_concat(ptr %t927, ptr @.str924) + %t929 = load ptr, ptr %t907 + %t930 = getelementptr inbounds %Cmp_Val, ptr %t929, i32 0, i32 0 + %t931 = load ptr, ptr %t930 + %t932 = call ptr @fn_str_concat(ptr %t928, ptr %t931) + %t933 = call ptr @fn_emit_bind(ptr %t932) + %t934 = call ptr @fn_val(ptr %t933, ptr @.str925) + store ptr %t934, ptr %retval + br label %ret +ifend74: + %t935 = load ptr, ptr %t0 + %t936 = call i32 @fn_str_eq(ptr %t935, ptr @.str926) + %t937 = icmp ne i32 %t936, 0 + br i1 %t937, label %then75, label %ifend77 +then75: + %t938 = load ptr, ptr %t1 + %t939 = getelementptr inbounds %Cmp_Node, ptr %t938, i32 0, i32 7 + %t940 = load ptr, ptr %t939 + %t941 = getelementptr inbounds %LSlice, ptr %t940, i32 0, i32 0 + %t942 = load ptr, ptr %t941 + %t943 = getelementptr inbounds ptr, ptr %t942, i32 0 + %t944 = load ptr, ptr %t943 + %t945 = call ptr @fn_emit_expr(ptr %t944) + store ptr %t945, ptr %t946 + %t947 = load ptr, ptr %t1 + %t948 = getelementptr inbounds %Cmp_Node, ptr %t947, i32 0, i32 7 + %t949 = load ptr, ptr %t948 + %t950 = getelementptr inbounds %LSlice, ptr %t949, i32 0, i32 0 + %t951 = load ptr, ptr %t950 + %t952 = getelementptr inbounds ptr, ptr %t951, i32 1 + %t953 = load ptr, ptr %t952 + %t954 = call ptr @fn_emit_expr(ptr %t953) + store ptr %t954, ptr %t955 + %t956 = load ptr, ptr %t1 + %t957 = getelementptr inbounds %Cmp_Node, ptr %t956, i32 0, i32 7 + %t958 = load ptr, ptr %t957 + %t959 = getelementptr inbounds %LSlice, ptr %t958, i32 0, i32 0 + %t960 = load ptr, ptr %t959 + %t961 = getelementptr inbounds ptr, ptr %t960, i32 2 + %t962 = load ptr, ptr %t961 + %t963 = call ptr @fn_emit_expr(ptr %t962) + store ptr %t963, ptr %t964 + %t965 = load ptr, ptr %t955 + %t966 = getelementptr inbounds %Cmp_Val, ptr %t965, i32 0, i32 0 + %t967 = load ptr, ptr %t966 + %t968 = call ptr @fn_str_concat(ptr @.str927, ptr %t967) + %t969 = call ptr @fn_str_concat(ptr %t968, ptr @.str928) + %t970 = load ptr, ptr %t946 + %t971 = getelementptr inbounds %Cmp_Val, ptr %t970, i32 0, i32 0 + %t972 = load ptr, ptr %t971 + %t973 = call ptr @fn_str_concat(ptr %t969, ptr %t972) + %t974 = call ptr @fn_emit_bind(ptr %t973) + store ptr %t974, ptr %t975 + %t976 = load ptr, ptr %t975 + %t977 = call ptr @fn_str_concat(ptr @.str929, ptr %t976) + %t978 = call ptr @fn_emit_bind(ptr %t977) + store ptr %t978, ptr %t979 + %t980 = load ptr, ptr %t975 + %t981 = call ptr @fn_str_concat(ptr @.str930, ptr %t980) + %t982 = call ptr @fn_str_concat(ptr %t981, ptr @.str931) + %t983 = call ptr @fn_emit_bind(ptr %t982) + store ptr %t983, ptr %t984 + %t985 = load ptr, ptr %t984 + %t986 = call ptr @fn_str_concat(ptr @.str932, ptr %t985) + %t987 = call ptr @fn_str_concat(ptr %t986, ptr @.str933) + %t988 = load ptr, ptr %t979 + %t989 = call ptr @fn_str_concat(ptr %t987, ptr %t988) + %t990 = call ptr @fn_str_concat(ptr %t989, ptr @.str934) + %t991 = load ptr, ptr %t975 + %t992 = call ptr @fn_str_concat(ptr %t990, ptr %t991) + %t993 = call ptr @fn_emit_bind(ptr %t992) + store ptr %t993, ptr %t994 + %t995 = load ptr, ptr %t975 + %t996 = call ptr @fn_str_concat(ptr @.str935, ptr %t995) + %t997 = call ptr @fn_str_concat(ptr %t996, ptr @.str936) + %t998 = call ptr @fn_emit_bind(ptr %t997) + store ptr %t998, ptr %t999 + %t1000 = load ptr, ptr %t975 + %t1001 = call ptr @fn_str_concat(ptr @.str937, ptr %t1000) + %t1002 = call ptr @fn_str_concat(ptr %t1001, ptr @.str938) + %t1003 = call ptr @fn_emit_bind(ptr %t1002) + store ptr %t1003, ptr %t1004 + %t1005 = load ptr, ptr %t1004 + %t1006 = call ptr @fn_str_concat(ptr @.str939, ptr %t1005) + %t1007 = call ptr @fn_str_concat(ptr %t1006, ptr @.str940) + %t1008 = call ptr @fn_emit_bind(ptr %t1007) + store ptr %t1008, ptr %t1009 + %t1010 = load ptr, ptr %t999 + %t1011 = call ptr @fn_str_concat(ptr @.str941, ptr %t1010) + %t1012 = call ptr @fn_str_concat(ptr %t1011, ptr @.str942) + %t1013 = load ptr, ptr %t1009 + %t1014 = call ptr @fn_str_concat(ptr %t1012, ptr %t1013) + %t1015 = call ptr @fn_emit_bind(ptr %t1014) + store ptr %t1015, ptr %t1016 + %t1017 = load ptr, ptr %t1016 + %t1018 = call ptr @fn_str_concat(ptr @.str943, ptr %t1017) + %t1019 = call ptr @fn_str_concat(ptr %t1018, ptr @.str944) + %t1020 = load ptr, ptr %t964 + %t1021 = getelementptr inbounds %Cmp_Val, ptr %t1020, i32 0, i32 0 + %t1022 = load ptr, ptr %t1021 + %t1023 = call ptr @fn_str_concat(ptr %t1019, ptr %t1022) + %t1024 = call ptr @fn_emit_bind(ptr %t1023) + store ptr %t1024, ptr %t1025 + %t1026 = load ptr, ptr %t946 + %t1027 = getelementptr inbounds %Cmp_Val, ptr %t1026, i32 0, i32 0 + %t1028 = load ptr, ptr %t1027 + %t1029 = call ptr @fn_str_concat(ptr @.str945, ptr %t1028) + %t1030 = call ptr @fn_str_concat(ptr %t1029, ptr @.str946) + %t1031 = load ptr, ptr %t1025 + %t1032 = call ptr @fn_str_concat(ptr %t1030, ptr %t1031) + %t1033 = call ptr @fn_emit_bind(ptr %t1032) + store ptr %t1033, ptr %t1034 + %t1035 = load ptr, ptr %t994 + %t1036 = call ptr @fn_str_concat(ptr @.str947, ptr %t1035) + %t1037 = call ptr @fn_str_concat(ptr %t1036, ptr @.str948) + %t1038 = load ptr, ptr %t964 + %t1039 = getelementptr inbounds %Cmp_Val, ptr %t1038, i32 0, i32 0 + %t1040 = load ptr, ptr %t1039 + %t1041 = call ptr @fn_str_concat(ptr %t1037, ptr %t1040) + %t1042 = call ptr @fn_emit_bind(ptr %t1041) + store ptr %t1042, ptr %t1043 + %t1044 = load ptr, ptr %t1043 + %t1045 = call ptr @fn_str_concat(ptr @.str949, ptr %t1044) + %t1046 = call ptr @fn_str_concat(ptr %t1045, ptr @.str950) + %t1047 = load ptr, ptr %t955 + %t1048 = getelementptr inbounds %Cmp_Val, ptr %t1047, i32 0, i32 0 + %t1049 = load ptr, ptr %t1048 + %t1050 = call ptr @fn_str_concat(ptr %t1046, ptr %t1049) + %t1051 = call ptr @fn_str_concat(ptr %t1050, ptr @.str951) + %t1052 = load ptr, ptr %t1034 + %t1053 = call ptr @fn_str_concat(ptr %t1051, ptr %t1052) + %t1054 = call ptr @fn_emit_bind(ptr %t1053) + %t1055 = call ptr @fn_val(ptr %t1054, ptr @.str952) + store ptr %t1055, ptr %retval + br label %ret +ifend77: + %t1056 = load ptr, ptr %t0 + %t1057 = call i32 @fn_str_eq(ptr %t1056, ptr @.str953) + %t1058 = icmp ne i32 %t1057, 0 + br i1 %t1058, label %then78, label %ifend80 +then78: + %t1059 = load ptr, ptr %t1 + %t1060 = getelementptr inbounds %Cmp_Node, ptr %t1059, i32 0, i32 7 + %t1061 = load ptr, ptr %t1060 + %t1062 = getelementptr inbounds %LSlice, ptr %t1061, i32 0, i32 0 + %t1063 = load ptr, ptr %t1062 + %t1064 = getelementptr inbounds ptr, ptr %t1063, i32 0 + %t1065 = load ptr, ptr %t1064 + %t1066 = call ptr @fn_emit_expr(ptr %t1065) + store ptr %t1066, ptr %t1067 + %t1068 = load ptr, ptr %t1 + %t1069 = getelementptr inbounds %Cmp_Node, ptr %t1068, i32 0, i32 7 + %t1070 = load ptr, ptr %t1069 + %t1071 = getelementptr inbounds %LSlice, ptr %t1070, i32 0, i32 0 + %t1072 = load ptr, ptr %t1071 + %t1073 = getelementptr inbounds ptr, ptr %t1072, i32 1 + %t1074 = load ptr, ptr %t1073 + %t1075 = call ptr @fn_emit_expr(ptr %t1074) + store ptr %t1075, ptr %t1076 + %t1077 = load ptr, ptr %t1 + %t1078 = getelementptr inbounds %Cmp_Node, ptr %t1077, i32 0, i32 7 + %t1079 = load ptr, ptr %t1078 + %t1080 = getelementptr inbounds %LSlice, ptr %t1079, i32 0, i32 0 + %t1081 = load ptr, ptr %t1080 + %t1082 = getelementptr inbounds ptr, ptr %t1081, i32 2 + %t1083 = load ptr, ptr %t1082 + %t1084 = call ptr @fn_emit_expr(ptr %t1083) + store ptr %t1084, ptr %t1085 + %t1086 = load ptr, ptr %t1067 + %t1087 = getelementptr inbounds %Cmp_Val, ptr %t1086, i32 0, i32 0 + %t1088 = load ptr, ptr %t1087 + %t1089 = load ptr, ptr %t1076 + %t1090 = getelementptr inbounds %Cmp_Val, ptr %t1089, i32 0, i32 0 + %t1091 = load ptr, ptr %t1090 + %t1092 = load ptr, ptr %t1085 + %t1093 = getelementptr inbounds %Cmp_Val, ptr %t1092, i32 0, i32 0 + %t1094 = load ptr, ptr %t1093 + %t1095 = call ptr @fn_fx_inv_lerp_code(ptr %t1088, ptr %t1091, ptr %t1094) + store ptr %t1095, ptr %t1096 + %t1097 = load ptr, ptr %t1096 + %t1098 = call ptr @fn_str_concat(ptr @.str954, ptr %t1097) + %t1099 = call ptr @fn_str_concat(ptr %t1098, ptr @.str955) + %t1100 = call ptr @fn_emit_bind(ptr %t1099) + store ptr %t1100, ptr %t1101 + %t1102 = load ptr, ptr %t1101 + %t1103 = call ptr @fn_str_concat(ptr @.str956, ptr %t1102) + %t1104 = call ptr @fn_str_concat(ptr %t1103, ptr @.str957) + %t1105 = load ptr, ptr %t1096 + %t1106 = call ptr @fn_str_concat(ptr %t1104, ptr %t1105) + %t1107 = call ptr @fn_emit_bind(ptr %t1106) + store ptr %t1107, ptr %t1108 + %t1109 = load ptr, ptr %t1108 + %t1110 = call ptr @fn_str_concat(ptr @.str958, ptr %t1109) + %t1111 = call ptr @fn_str_concat(ptr %t1110, ptr @.str959) + %t1112 = call ptr @fn_emit_bind(ptr %t1111) + store ptr %t1112, ptr %t1113 + %t1114 = load ptr, ptr %t1113 + %t1115 = call ptr @fn_str_concat(ptr @.str960, ptr %t1114) + %t1116 = call ptr @fn_str_concat(ptr %t1115, ptr @.str961) + %t1117 = load ptr, ptr %t1108 + %t1118 = call ptr @fn_str_concat(ptr %t1116, ptr %t1117) + %t1119 = call ptr @fn_emit_bind(ptr %t1118) + store ptr %t1119, ptr %t1120 + %t1121 = load ptr, ptr %t1120 + %t1122 = call ptr @fn_str_concat(ptr @.str962, ptr %t1121) + %t1123 = call ptr @fn_str_concat(ptr %t1122, ptr @.str963) + %t1124 = call ptr @fn_emit_bind(ptr %t1123) + store ptr %t1124, ptr %t1125 + %t1126 = load ptr, ptr %t1125 + %t1127 = call ptr @fn_str_concat(ptr @.str964, ptr %t1126) + %t1128 = call ptr @fn_emit_bind(ptr %t1127) + store ptr %t1128, ptr %t1129 + %t1130 = load ptr, ptr %t1120 + %t1131 = load ptr, ptr %t1120 + %t1132 = call ptr @fn_fx_mul_code(ptr %t1130, ptr %t1131) + store ptr %t1132, ptr %t1133 + %t1134 = load ptr, ptr %t1133 + %t1135 = load ptr, ptr %t1129 + %t1136 = call ptr @fn_fx_mul_code(ptr %t1134, ptr %t1135) + %t1137 = call ptr @fn_val(ptr %t1136, ptr @.str965) + store ptr %t1137, ptr %retval + br label %ret +ifend80: + %t1138 = load ptr, ptr %t1 + %t1139 = getelementptr inbounds %Cmp_Node, ptr %t1138, i32 0, i32 7 + %t1140 = load ptr, ptr %t1139 + %t1141 = getelementptr inbounds %LSlice, ptr %t1140, i32 0, i32 0 + %t1142 = load ptr, ptr %t1141 + %t1143 = getelementptr inbounds ptr, ptr %t1142, i32 0 + %t1144 = load ptr, ptr %t1143 + %t1145 = call ptr @fn_emit_expr(ptr %t1144) + store ptr %t1145, ptr %t1146 + %t1147 = load ptr, ptr %t1 + %t1148 = getelementptr inbounds %Cmp_Node, ptr %t1147, i32 0, i32 7 + %t1149 = load ptr, ptr %t1148 + %t1150 = getelementptr inbounds %LSlice, ptr %t1149, i32 0, i32 0 + %t1151 = load ptr, ptr %t1150 + %t1152 = getelementptr inbounds ptr, ptr %t1151, i32 1 + %t1153 = load ptr, ptr %t1152 + %t1154 = call ptr @fn_emit_expr(ptr %t1153) + store ptr %t1154, ptr %t1155 + %t1156 = load ptr, ptr %t1 + %t1157 = getelementptr inbounds %Cmp_Node, ptr %t1156, i32 0, i32 7 + %t1158 = load ptr, ptr %t1157 + %t1159 = getelementptr inbounds %LSlice, ptr %t1158, i32 0, i32 0 + %t1160 = load ptr, ptr %t1159 + %t1161 = getelementptr inbounds ptr, ptr %t1160, i32 2 + %t1162 = load ptr, ptr %t1161 + %t1163 = call ptr @fn_emit_expr(ptr %t1162) + store ptr %t1163, ptr %t1164 + %t1165 = load ptr, ptr %t1 + %t1166 = getelementptr inbounds %Cmp_Node, ptr %t1165, i32 0, i32 7 + %t1167 = load ptr, ptr %t1166 + %t1168 = getelementptr inbounds %LSlice, ptr %t1167, i32 0, i32 0 + %t1169 = load ptr, ptr %t1168 + %t1170 = getelementptr inbounds ptr, ptr %t1169, i32 3 + %t1171 = load ptr, ptr %t1170 + %t1172 = call ptr @fn_emit_expr(ptr %t1171) + store ptr %t1172, ptr %t1173 + %t1174 = load ptr, ptr %t1 + %t1175 = getelementptr inbounds %Cmp_Node, ptr %t1174, i32 0, i32 7 + %t1176 = load ptr, ptr %t1175 + %t1177 = getelementptr inbounds %LSlice, ptr %t1176, i32 0, i32 0 + %t1178 = load ptr, ptr %t1177 + %t1179 = getelementptr inbounds ptr, ptr %t1178, i32 4 + %t1180 = load ptr, ptr %t1179 + %t1181 = call ptr @fn_emit_expr(ptr %t1180) + store ptr %t1181, ptr %t1182 + %t1183 = load ptr, ptr %t1155 + %t1184 = getelementptr inbounds %Cmp_Val, ptr %t1183, i32 0, i32 0 + %t1185 = load ptr, ptr %t1184 + %t1186 = load ptr, ptr %t1164 + %t1187 = getelementptr inbounds %Cmp_Val, ptr %t1186, i32 0, i32 0 + %t1188 = load ptr, ptr %t1187 + %t1189 = load ptr, ptr %t1146 + %t1190 = getelementptr inbounds %Cmp_Val, ptr %t1189, i32 0, i32 0 + %t1191 = load ptr, ptr %t1190 + %t1192 = call ptr @fn_fx_inv_lerp_code(ptr %t1185, ptr %t1188, ptr %t1191) + store ptr %t1192, ptr %t1193 + %t1194 = load ptr, ptr %t1173 + %t1195 = getelementptr inbounds %Cmp_Val, ptr %t1194, i32 0, i32 0 + %t1196 = load ptr, ptr %t1195 + %t1197 = load ptr, ptr %t1182 + %t1198 = getelementptr inbounds %Cmp_Val, ptr %t1197, i32 0, i32 0 + %t1199 = load ptr, ptr %t1198 + %t1200 = load ptr, ptr %t1193 + %t1201 = call ptr @fn_fx_lerp_code(ptr %t1196, ptr %t1199, ptr %t1200) + %t1202 = call ptr @fn_val(ptr %t1201, ptr @.str966) + store ptr %t1202, ptr %retval + br label %ret +ret: + %t1203 = load ptr, ptr %retval + ret ptr %t1203 +} + +define void @fn_emit_math_prelude() { +entry: + call void @fn_emith(ptr @.str967) + call void @fn_emith(ptr @.str968) + call void @fn_emith(ptr @.str969) + call void @fn_emith(ptr @.str970) + call void @fn_emith(ptr @.str971) + call void @fn_emith(ptr @.str972) + call void @fn_emith(ptr @.str973) + call void @fn_emith(ptr @.str974) + call void @fn_emith(ptr @.str975) + call void @fn_emith(ptr @.str976) + call void @fn_emith(ptr @.str977) + call void @fn_emith(ptr @.str978) + call void @fn_emith(ptr @.str979) + call void @fn_emith(ptr @.str980) + call void @fn_emith(ptr @.str981) + call void @fn_emith(ptr @.str982) + call void @fn_emith(ptr @.str983) + call void @fn_emith(ptr @.str984) + call void @fn_emith(ptr @.str985) + call void @fn_emith(ptr @.str986) + call void @fn_emith(ptr @.str987) + call void @fn_emith(ptr @.str988) + call void @fn_emith(ptr @.str989) + call void @fn_emith(ptr @.str990) + call void @fn_emith(ptr @.str991) + call void @fn_emith(ptr @.str992) + call void @fn_emith(ptr @.str993) + call void @fn_emith(ptr @.str994) + call void @fn_emith(ptr @.str995) + call void @fn_emith(ptr @.str996) + call void @fn_emith(ptr @.str997) + call void @fn_emith(ptr @.str998) + call void @fn_emith(ptr @.str999) + call void @fn_emith(ptr @.str1000) + call void @fn_emith(ptr @.str1001) + call void @fn_emith(ptr @.str1002) + call void @fn_emith(ptr @.str1003) + call void @fn_emith(ptr @.str1004) + call void @fn_emith(ptr @.str1005) + call void @fn_emith(ptr @.str1006) + call void @fn_emith(ptr @.str1007) + call void @fn_emith(ptr @.str1008) + call void @fn_emith(ptr @.str1009) + call void @fn_emith(ptr @.str1010) + call void @fn_emith(ptr @.str1011) + call void @fn_emith(ptr @.str1012) + call void @fn_emith(ptr @.str1013) + call void @fn_emith(ptr @.str1014) + call void @fn_emith(ptr @.str1015) + call void @fn_emith(ptr @.str1016) + call void @fn_emith(ptr @.str1017) + call void @fn_emith(ptr @.str1018) + call void @fn_emith(ptr @.str1019) + call void @fn_emith(ptr @.str1020) + call void @fn_emith(ptr @.str1021) + call void @fn_emith(ptr @.str1022) + call void @fn_emith(ptr @.str1023) + call void @fn_emith(ptr @.str1024) + call void @fn_emith(ptr @.str1025) + call void @fn_emith(ptr @.str1026) + call void @fn_emith(ptr @.str1027) + call void @fn_emith(ptr @.str1028) + call void @fn_emith(ptr @.str1029) + call void @fn_emith(ptr @.str1030) + call void @fn_emith(ptr @.str1031) + call void @fn_emith(ptr @.str1032) + call void @fn_emith(ptr @.str1033) + call void @fn_emith(ptr @.str1034) + call void @fn_emith(ptr @.str1035) + call void @fn_emith(ptr @.str1036) + call void @fn_emith(ptr @.str1037) + call void @fn_emith(ptr @.str1038) + call void @fn_emith(ptr @.str1039) + call void @fn_emith(ptr @.str1040) + call void @fn_emith(ptr @.str1041) + call void @fn_emith(ptr @.str1042) + call void @fn_emith(ptr @.str1043) + call void @fn_emith(ptr @.str1044) + br label %ret +ret: + ret void +} + +define i32 @fn_is_text_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t20 = alloca i32 + %t21 = alloca i32 + %t22 = alloca i32 + %t47 = alloca i32 + %t58 = alloca i32 + %t69 = alloca i32 + %t70 = alloca i32 + %t71 = alloca i32 + %t96 = alloca i32 + %t107 = alloca i32 + %t108 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str1045) + %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_str_eq(ptr %t7, ptr @.str1046) + %t9 = icmp ne i32 %t8, 0 + %t10 = zext i1 %t9 to i32 + store i32 %t10, ptr %t2 + br label %scend1 +scend1: + %t11 = load i32, ptr %t2 + %t12 = icmp ne i32 %t11, 0 + %t13 = zext i1 %t12 to i32 + store i32 %t13, ptr %t1 + br i1 %t12, label %scend3, label %sc2 +sc2: + %t14 = load ptr, ptr %t0 + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str1047) + %t16 = icmp ne i32 %t15, 0 + %t17 = zext i1 %t16 to i32 + store i32 %t17, ptr %t1 + br label %scend3 +scend3: + %t18 = load i32, ptr %t1 + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then4, label %ifend6 +then4: + store i32 1, ptr %retval + br label %ret +ifend6: + %t23 = load ptr, ptr %t0 + %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str1048) + %t25 = icmp ne i32 %t24, 0 + %t26 = zext i1 %t25 to i32 + store i32 %t26, ptr %t22 + br i1 %t25, label %scend8, label %sc7 +sc7: + %t27 = load ptr, ptr %t0 + %t28 = call i32 @fn_str_eq(ptr %t27, ptr @.str1049) + %t29 = icmp ne i32 %t28, 0 + %t30 = zext i1 %t29 to i32 + store i32 %t30, ptr %t22 + br label %scend8 +scend8: + %t31 = load i32, ptr %t22 + %t32 = icmp ne i32 %t31, 0 + %t33 = zext i1 %t32 to i32 + store i32 %t33, ptr %t21 + br i1 %t32, label %scend10, label %sc9 +sc9: + %t34 = load ptr, ptr %t0 + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str1050) + %t36 = icmp ne i32 %t35, 0 + %t37 = zext i1 %t36 to i32 + store i32 %t37, ptr %t21 + br label %scend10 +scend10: + %t38 = load i32, ptr %t21 + %t39 = icmp ne i32 %t38, 0 + %t40 = zext i1 %t39 to i32 + store i32 %t40, ptr %t20 + br i1 %t39, label %scend12, label %sc11 +sc11: + %t41 = load ptr, ptr %t0 + %t42 = call i32 @fn_str_eq(ptr %t41, ptr @.str1051) + %t43 = icmp ne i32 %t42, 0 + %t44 = zext i1 %t43 to i32 + store i32 %t44, ptr %t20 + br label %scend12 +scend12: + %t45 = load i32, ptr %t20 + %t46 = icmp ne i32 %t45, 0 + br i1 %t46, label %then13, label %ifend15 +then13: + store i32 1, ptr %retval + br label %ret +ifend15: + %t48 = load ptr, ptr %t0 + %t49 = call i32 @fn_str_eq(ptr %t48, ptr @.str1052) + %t50 = icmp ne i32 %t49, 0 + %t51 = zext i1 %t50 to i32 + store i32 %t51, ptr %t47 + br i1 %t50, label %scend17, label %sc16 +sc16: + %t52 = load ptr, ptr %t0 + %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str1053) + %t54 = icmp ne i32 %t53, 0 + %t55 = zext i1 %t54 to i32 + store i32 %t55, ptr %t47 + br label %scend17 +scend17: + %t56 = load i32, ptr %t47 + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %then18, label %ifend20 +then18: + store i32 1, ptr %retval + br label %ret +ifend20: + %t59 = load ptr, ptr %t0 + %t60 = call i32 @fn_str_eq(ptr %t59, ptr @.str1054) + %t61 = icmp ne i32 %t60, 0 + %t62 = zext i1 %t61 to i32 + store i32 %t62, ptr %t58 + br i1 %t61, label %scend22, label %sc21 +sc21: + %t63 = load ptr, ptr %t0 + %t64 = call i32 @fn_str_eq(ptr %t63, ptr @.str1055) + %t65 = icmp ne i32 %t64, 0 + %t66 = zext i1 %t65 to i32 + store i32 %t66, ptr %t58 + br label %scend22 +scend22: + %t67 = load i32, ptr %t58 + %t68 = icmp ne i32 %t67, 0 + br i1 %t68, label %then23, label %ifend25 +then23: + store i32 1, ptr %retval + br label %ret +ifend25: + %t72 = load ptr, ptr %t0 + %t73 = call i32 @fn_str_eq(ptr %t72, ptr @.str1056) + %t74 = icmp ne i32 %t73, 0 + %t75 = zext i1 %t74 to i32 + store i32 %t75, ptr %t71 + br i1 %t74, label %scend27, label %sc26 +sc26: + %t76 = load ptr, ptr %t0 + %t77 = call i32 @fn_str_eq(ptr %t76, ptr @.str1057) + %t78 = icmp ne i32 %t77, 0 + %t79 = zext i1 %t78 to i32 + store i32 %t79, ptr %t71 + br label %scend27 +scend27: + %t80 = load i32, ptr %t71 + %t81 = icmp ne i32 %t80, 0 + %t82 = zext i1 %t81 to i32 + store i32 %t82, ptr %t70 + br i1 %t81, label %scend29, label %sc28 +sc28: + %t83 = load ptr, ptr %t0 + %t84 = call i32 @fn_str_eq(ptr %t83, ptr @.str1058) + %t85 = icmp ne i32 %t84, 0 + %t86 = zext i1 %t85 to i32 + store i32 %t86, ptr %t70 + br label %scend29 +scend29: + %t87 = load i32, ptr %t70 + %t88 = icmp ne i32 %t87, 0 + %t89 = zext i1 %t88 to i32 + store i32 %t89, ptr %t69 + br i1 %t88, label %scend31, label %sc30 +sc30: + %t90 = load ptr, ptr %t0 + %t91 = call i32 @fn_str_eq(ptr %t90, ptr @.str1059) + %t92 = icmp ne i32 %t91, 0 + %t93 = zext i1 %t92 to i32 + store i32 %t93, ptr %t69 + br label %scend31 +scend31: + %t94 = load i32, ptr %t69 + %t95 = icmp ne i32 %t94, 0 + br i1 %t95, label %then32, label %ifend34 +then32: + store i32 1, ptr %retval + br label %ret +ifend34: + %t97 = load ptr, ptr %t0 + %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str1060) + %t99 = icmp ne i32 %t98, 0 + %t100 = zext i1 %t99 to i32 + store i32 %t100, ptr %t96 + br i1 %t99, label %scend36, label %sc35 +sc35: + %t101 = load ptr, ptr %t0 + %t102 = call i32 @fn_str_eq(ptr %t101, ptr @.str1061) + %t103 = icmp ne i32 %t102, 0 + %t104 = zext i1 %t103 to i32 + store i32 %t104, ptr %t96 + br label %scend36 +scend36: + %t105 = load i32, ptr %t96 + %t106 = icmp ne i32 %t105, 0 + br i1 %t106, label %then37, label %ifend39 +then37: + store i32 1, ptr %retval + br label %ret +ifend39: + %t109 = load ptr, ptr %t0 + %t110 = call i32 @fn_str_eq(ptr %t109, ptr @.str1062) + %t111 = icmp ne i32 %t110, 0 + %t112 = zext i1 %t111 to i32 + store i32 %t112, ptr %t108 + br i1 %t111, label %scend41, label %sc40 +sc40: + %t113 = load ptr, ptr %t0 + %t114 = call i32 @fn_str_eq(ptr %t113, ptr @.str1063) + %t115 = icmp ne i32 %t114, 0 + %t116 = zext i1 %t115 to i32 + store i32 %t116, ptr %t108 + br label %scend41 +scend41: + %t117 = load i32, ptr %t108 + %t118 = icmp ne i32 %t117, 0 + %t119 = zext i1 %t118 to i32 + store i32 %t119, ptr %t107 + br i1 %t118, label %scend43, label %sc42 +sc42: + %t120 = load ptr, ptr %t0 + %t121 = call i32 @fn_str_eq(ptr %t120, ptr @.str1064) + %t122 = icmp ne i32 %t121, 0 + %t123 = zext i1 %t122 to i32 + store i32 %t123, ptr %t107 + br label %scend43 +scend43: + %t124 = load i32, ptr %t107 + %t125 = icmp ne i32 %t124, 0 + br i1 %t125, label %then44, label %ifend46 +then44: + store i32 1, ptr %retval + br label %ret +ifend46: + store i32 0, ptr %retval + br label %ret +ret: + %t126 = load i32, ptr %retval + ret i32 %t126 +} + +define ptr @fn_emit_text_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t13 = alloca ptr + %t32 = alloca ptr + %t41 = alloca ptr + %t50 = alloca ptr + %t79 = alloca ptr + %t88 = alloca ptr + %t112 = alloca ptr + %t121 = alloca ptr + %t142 = alloca ptr + %t152 = alloca ptr + %t169 = alloca ptr + %t180 = alloca ptr + %t184 = alloca ptr + %t241 = alloca ptr + %t265 = alloca ptr + %t289 = alloca ptr + %t313 = alloca ptr + %t322 = alloca ptr + %t351 = alloca ptr + %t375 = alloca ptr + %t388 = alloca i32 + %t407 = alloca ptr + %t419 = alloca ptr + %t427 = alloca ptr + %t437 = alloca ptr + %t442 = alloca ptr + %t449 = alloca ptr + %t456 = alloca ptr + %t461 = alloca ptr + %t477 = alloca ptr + %t484 = alloca ptr + %t502 = alloca ptr + %t507 = alloca ptr + %t519 = alloca ptr + %t526 = alloca ptr + %t528 = alloca ptr + %t534 = alloca ptr + %t536 = alloca ptr + %t538 = alloca ptr + %t551 = alloca ptr + %t564 = alloca ptr + %t569 = alloca ptr + %t574 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str1065) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = load ptr, ptr %t1 + %t6 = getelementptr inbounds %Cmp_Node, ptr %t5, i32 0, i32 7 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 0 + %t9 = load ptr, ptr %t8 + %t10 = getelementptr inbounds ptr, ptr %t9, i32 0 + %t11 = load ptr, ptr %t10 + %t12 = call ptr @fn_emit_expr(ptr %t11) + store ptr %t12, ptr %t13 + store i32 1, ptr @g_g_uses_intstr + %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_str_concat(ptr @.str1066, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str1067) + %t19 = call ptr @fn_emit_bind(ptr %t18) + %t20 = call ptr @fn_val(ptr %t19, ptr @.str1068) + store ptr %t20, ptr %retval + br label %ret +ifend2: + %t21 = load ptr, ptr %t0 + %t22 = call i32 @fn_str_eq(ptr %t21, ptr @.str1069) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then3, label %ifend5 +then3: + %t24 = load ptr, ptr %t1 + %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 7 + %t26 = load ptr, ptr %t25 + %t27 = getelementptr inbounds %LSlice, ptr %t26, i32 0, i32 0 + %t28 = load ptr, ptr %t27 + %t29 = getelementptr inbounds ptr, ptr %t28, i32 0 + %t30 = load ptr, ptr %t29 + %t31 = call ptr @fn_emit_expr(ptr %t30) + store ptr %t31, ptr %t32 + %t33 = load ptr, ptr %t1 + %t34 = getelementptr inbounds %Cmp_Node, ptr %t33, i32 0, i32 7 + %t35 = load ptr, ptr %t34 + %t36 = getelementptr inbounds %LSlice, ptr %t35, i32 0, i32 0 + %t37 = load ptr, ptr %t36 + %t38 = getelementptr inbounds ptr, ptr %t37, i32 1 + %t39 = load ptr, ptr %t38 + %t40 = call ptr @fn_emit_expr(ptr %t39) + store ptr %t40, ptr %t41 + %t42 = load ptr, ptr %t1 + %t43 = getelementptr inbounds %Cmp_Node, ptr %t42, i32 0, i32 7 + %t44 = load ptr, ptr %t43 + %t45 = getelementptr inbounds %LSlice, ptr %t44, i32 0, i32 0 + %t46 = load ptr, ptr %t45 + %t47 = getelementptr inbounds ptr, ptr %t46, i32 2 + %t48 = load ptr, ptr %t47 + %t49 = call ptr @fn_emit_expr(ptr %t48) + store ptr %t49, ptr %t50 + store i32 1, ptr @g_g_uses_strslice + %t51 = load ptr, ptr %t32 + %t52 = getelementptr inbounds %Cmp_Val, ptr %t51, i32 0, i32 0 + %t53 = load ptr, ptr %t52 + %t54 = call ptr @fn_str_concat(ptr @.str1070, ptr %t53) + %t55 = call ptr @fn_str_concat(ptr %t54, ptr @.str1071) + %t56 = load ptr, ptr %t41 + %t57 = getelementptr inbounds %Cmp_Val, ptr %t56, i32 0, i32 0 + %t58 = load ptr, ptr %t57 + %t59 = call ptr @fn_str_concat(ptr %t55, ptr %t58) + %t60 = call ptr @fn_str_concat(ptr %t59, ptr @.str1072) + %t61 = load ptr, ptr %t50 + %t62 = getelementptr inbounds %Cmp_Val, ptr %t61, i32 0, i32 0 + %t63 = load ptr, ptr %t62 + %t64 = call ptr @fn_str_concat(ptr %t60, ptr %t63) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str1073) + %t66 = call ptr @fn_emit_bind(ptr %t65) + %t67 = call ptr @fn_val(ptr %t66, ptr @.str1074) + store ptr %t67, ptr %retval + br label %ret +ifend5: + %t68 = load ptr, ptr %t0 + %t69 = call i32 @fn_str_eq(ptr %t68, ptr @.str1075) + %t70 = icmp ne i32 %t69, 0 + br i1 %t70, label %then6, label %ifend8 +then6: + %t71 = load ptr, ptr %t1 + %t72 = getelementptr inbounds %Cmp_Node, ptr %t71, i32 0, i32 7 + %t73 = load ptr, ptr %t72 + %t74 = getelementptr inbounds %LSlice, ptr %t73, i32 0, i32 0 + %t75 = load ptr, ptr %t74 + %t76 = getelementptr inbounds ptr, ptr %t75, i32 0 + %t77 = load ptr, ptr %t76 + %t78 = call ptr @fn_emit_expr(ptr %t77) + store ptr %t78, ptr %t79 + %t80 = load ptr, ptr %t1 + %t81 = getelementptr inbounds %Cmp_Node, ptr %t80, i32 0, i32 7 + %t82 = load ptr, ptr %t81 + %t83 = getelementptr inbounds %LSlice, ptr %t82, i32 0, i32 0 + %t84 = load ptr, ptr %t83 + %t85 = getelementptr inbounds ptr, ptr %t84, i32 1 + %t86 = load ptr, ptr %t85 + %t87 = call ptr @fn_emit_expr(ptr %t86) + store ptr %t87, ptr %t88 + store i32 1, ptr @g_g_uses_str + %t89 = load ptr, ptr %t79 + %t90 = getelementptr inbounds %Cmp_Val, ptr %t89, i32 0, i32 0 + %t91 = load ptr, ptr %t90 + %t92 = call ptr @fn_str_concat(ptr @.str1076, ptr %t91) + %t93 = call ptr @fn_str_concat(ptr %t92, ptr @.str1077) + %t94 = load ptr, ptr %t88 + %t95 = getelementptr inbounds %Cmp_Val, ptr %t94, i32 0, i32 0 + %t96 = load ptr, ptr %t95 + %t97 = call ptr @fn_str_concat(ptr %t93, ptr %t96) + %t98 = call ptr @fn_str_concat(ptr %t97, ptr @.str1078) + %t99 = call ptr @fn_emit_bind(ptr %t98) + %t100 = call ptr @fn_val(ptr %t99, ptr @.str1079) + store ptr %t100, ptr %retval + br label %ret +ifend8: + %t101 = load ptr, ptr %t0 + %t102 = call i32 @fn_str_eq(ptr %t101, ptr @.str1080) + %t103 = icmp ne i32 %t102, 0 + br i1 %t103, label %then9, label %ifend11 +then9: + %t104 = load ptr, ptr %t1 + %t105 = getelementptr inbounds %Cmp_Node, ptr %t104, i32 0, i32 7 + %t106 = load ptr, ptr %t105 + %t107 = getelementptr inbounds %LSlice, ptr %t106, i32 0, i32 0 + %t108 = load ptr, ptr %t107 + %t109 = getelementptr inbounds ptr, ptr %t108, i32 0 + %t110 = load ptr, ptr %t109 + %t111 = call ptr @fn_emit_expr(ptr %t110) + store ptr %t111, ptr %t112 + %t113 = load ptr, ptr %t1 + %t114 = getelementptr inbounds %Cmp_Node, ptr %t113, i32 0, i32 7 + %t115 = load ptr, ptr %t114 + %t116 = getelementptr inbounds %LSlice, ptr %t115, i32 0, i32 0 + %t117 = load ptr, ptr %t116 + %t118 = getelementptr inbounds ptr, ptr %t117, i32 1 + %t119 = load ptr, ptr %t118 + %t120 = call ptr @fn_emit_expr(ptr %t119) + store ptr %t120, ptr %t121 + store i32 1, ptr @g_g_uses_str + %t122 = load ptr, ptr %t112 + %t123 = getelementptr inbounds %Cmp_Val, ptr %t122, i32 0, i32 0 + %t124 = load ptr, ptr %t123 + %t125 = call ptr @fn_str_concat(ptr @.str1081, ptr %t124) + %t126 = call ptr @fn_str_concat(ptr %t125, ptr @.str1082) + %t127 = load ptr, ptr %t121 + %t128 = getelementptr inbounds %Cmp_Val, ptr %t127, i32 0, i32 0 + %t129 = load ptr, ptr %t128 + %t130 = call ptr @fn_str_concat(ptr %t126, ptr %t129) + %t131 = call ptr @fn_str_concat(ptr %t130, ptr @.str1083) + %t132 = call ptr @fn_emit_bind(ptr %t131) + %t133 = call ptr @fn_val(ptr %t132, ptr @.str1084) + store ptr %t133, ptr %retval + br label %ret +ifend11: + %t134 = load ptr, ptr %t1 + %t135 = getelementptr inbounds %Cmp_Node, ptr %t134, i32 0, i32 7 + %t136 = load ptr, ptr %t135 + %t137 = getelementptr inbounds %LSlice, ptr %t136, i32 0, i32 0 + %t138 = load ptr, ptr %t137 + %t139 = getelementptr inbounds ptr, ptr %t138, i32 0 + %t140 = load ptr, ptr %t139 + %t141 = call ptr @fn_emit_expr(ptr %t140) + store ptr %t141, ptr %t142 + %t143 = load ptr, ptr %t0 + %t144 = call i32 @fn_str_eq(ptr %t143, ptr @.str1085) + %t145 = icmp ne i32 %t144, 0 + br i1 %t145, label %then12, label %ifend14 +then12: + %t146 = load ptr, ptr %t142 + %t147 = getelementptr inbounds %Cmp_Val, ptr %t146, i32 0, i32 0 + %t148 = load ptr, ptr %t147 + %t149 = call ptr @fn_str_concat(ptr @.str1086, ptr %t148) + %t150 = call ptr @fn_str_concat(ptr %t149, ptr @.str1087) + %t151 = call ptr @fn_emit_bind(ptr %t150) + store ptr %t151, ptr %t152 + %t153 = load ptr, ptr %t152 + %t154 = call ptr @fn_str_concat(ptr @.str1088, ptr %t153) + %t155 = call ptr @fn_str_concat(ptr %t154, ptr @.str1089) + %t156 = call ptr @fn_emit_bind(ptr %t155) + %t157 = call ptr @fn_val(ptr %t156, ptr @.str1090) + store ptr %t157, ptr %retval + br label %ret +ifend14: + %t158 = load ptr, ptr %t0 + %t159 = call i32 @fn_str_eq(ptr %t158, ptr @.str1091) + %t160 = icmp ne i32 %t159, 0 + br i1 %t160, label %then15, label %ifend17 +then15: + %t161 = load ptr, ptr %t1 + %t162 = getelementptr inbounds %Cmp_Node, ptr %t161, i32 0, i32 7 + %t163 = load ptr, ptr %t162 + %t164 = getelementptr inbounds %LSlice, ptr %t163, i32 0, i32 0 + %t165 = load ptr, ptr %t164 + %t166 = getelementptr inbounds ptr, ptr %t165, i32 1 + %t167 = load ptr, ptr %t166 + %t168 = call ptr @fn_emit_expr(ptr %t167) + store ptr %t168, ptr %t169 + %t170 = load ptr, ptr %t142 + %t171 = getelementptr inbounds %Cmp_Val, ptr %t170, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = call ptr @fn_str_concat(ptr @.str1092, ptr %t172) + %t174 = call ptr @fn_str_concat(ptr %t173, ptr @.str1093) + %t175 = load ptr, ptr %t169 + %t176 = getelementptr inbounds %Cmp_Val, ptr %t175, i32 0, i32 0 + %t177 = load ptr, ptr %t176 + %t178 = call ptr @fn_str_concat(ptr %t174, ptr %t177) + %t179 = call ptr @fn_emit_bind(ptr %t178) + store ptr %t179, ptr %t180 + %t181 = load ptr, ptr %t180 + %t182 = call ptr @fn_str_concat(ptr @.str1094, ptr %t181) + %t183 = call ptr @fn_emit_bind(ptr %t182) + store ptr %t183, ptr %t184 + %t185 = load ptr, ptr %t184 + %t186 = call ptr @fn_str_concat(ptr @.str1095, ptr %t185) + %t187 = call ptr @fn_str_concat(ptr %t186, ptr @.str1096) + %t188 = call ptr @fn_emit_bind(ptr %t187) + %t189 = call ptr @fn_val(ptr %t188, ptr @.str1097) + store ptr %t189, ptr %retval + br label %ret +ifend17: + %t190 = load ptr, ptr %t0 + %t191 = call i32 @fn_str_eq(ptr %t190, ptr @.str1098) + %t192 = icmp ne i32 %t191, 0 + br i1 %t192, label %then18, label %ifend20 +then18: + %t193 = load ptr, ptr %t142 + %t194 = getelementptr inbounds %Cmp_Val, ptr %t193, i32 0, i32 0 + %t195 = load ptr, ptr %t194 + %t196 = call ptr @fn_str_concat(ptr @.str1099, ptr %t195) + %t197 = call ptr @fn_str_concat(ptr %t196, ptr @.str1100) + %t198 = call ptr @fn_emit_bind(ptr %t197) + %t199 = call ptr @fn_val(ptr %t198, ptr @.str1101) + store ptr %t199, ptr %retval + br label %ret +ifend20: + %t200 = load ptr, ptr %t0 + %t201 = call i32 @fn_str_eq(ptr %t200, ptr @.str1102) + %t202 = icmp ne i32 %t201, 0 + br i1 %t202, label %then21, label %ifend23 +then21: + store i32 1, ptr @g_g_uses_textrt + %t203 = load ptr, ptr %t142 + %t204 = getelementptr inbounds %Cmp_Val, ptr %t203, i32 0, i32 0 + %t205 = load ptr, ptr %t204 + %t206 = call ptr @fn_str_concat(ptr @.str1103, ptr %t205) + %t207 = call ptr @fn_str_concat(ptr %t206, ptr @.str1104) + %t208 = call ptr @fn_emit_bind(ptr %t207) + %t209 = call ptr @fn_val(ptr %t208, ptr @.str1105) + store ptr %t209, ptr %retval + br label %ret +ifend23: + %t210 = load ptr, ptr %t0 + %t211 = call i32 @fn_str_eq(ptr %t210, ptr @.str1106) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then24, label %ifend26 +then24: + store i32 1, ptr @g_g_uses_textrt + %t213 = load ptr, ptr %t142 + %t214 = getelementptr inbounds %Cmp_Val, ptr %t213, i32 0, i32 0 + %t215 = load ptr, ptr %t214 + %t216 = call ptr @fn_str_concat(ptr @.str1107, ptr %t215) + %t217 = call ptr @fn_str_concat(ptr %t216, ptr @.str1108) + %t218 = call ptr @fn_emit_bind(ptr %t217) + %t219 = call ptr @fn_val(ptr %t218, ptr @.str1109) + store ptr %t219, ptr %retval + br label %ret +ifend26: + %t220 = load ptr, ptr %t0 + %t221 = call i32 @fn_str_eq(ptr %t220, ptr @.str1110) + %t222 = icmp ne i32 %t221, 0 + br i1 %t222, label %then27, label %ifend29 +then27: + store i32 1, ptr @g_g_uses_textrt + %t223 = load ptr, ptr %t142 + %t224 = getelementptr inbounds %Cmp_Val, ptr %t223, i32 0, i32 0 + %t225 = load ptr, ptr %t224 + %t226 = call ptr @fn_str_concat(ptr @.str1111, ptr %t225) + %t227 = call ptr @fn_str_concat(ptr %t226, ptr @.str1112) + %t228 = call ptr @fn_emit_bind(ptr %t227) + %t229 = call ptr @fn_val(ptr %t228, ptr @.str1113) + store ptr %t229, ptr %retval + br label %ret +ifend29: + %t230 = load ptr, ptr %t0 + %t231 = call i32 @fn_str_eq(ptr %t230, ptr @.str1114) + %t232 = icmp ne i32 %t231, 0 + br i1 %t232, label %then30, label %ifend32 +then30: + store i32 1, ptr @g_g_uses_textrt + %t233 = load ptr, ptr %t1 + %t234 = getelementptr inbounds %Cmp_Node, ptr %t233, i32 0, i32 7 + %t235 = load ptr, ptr %t234 + %t236 = getelementptr inbounds %LSlice, ptr %t235, i32 0, i32 0 + %t237 = load ptr, ptr %t236 + %t238 = getelementptr inbounds ptr, ptr %t237, i32 1 + %t239 = load ptr, ptr %t238 + %t240 = call ptr @fn_emit_expr(ptr %t239) + store ptr %t240, ptr %t241 + %t242 = load ptr, ptr %t142 + %t243 = getelementptr inbounds %Cmp_Val, ptr %t242, i32 0, i32 0 + %t244 = load ptr, ptr %t243 + %t245 = call ptr @fn_str_concat(ptr @.str1115, ptr %t244) + %t246 = call ptr @fn_str_concat(ptr %t245, ptr @.str1116) + %t247 = load ptr, ptr %t241 + %t248 = getelementptr inbounds %Cmp_Val, ptr %t247, i32 0, i32 0 + %t249 = load ptr, ptr %t248 + %t250 = call ptr @fn_str_concat(ptr %t246, ptr %t249) + %t251 = call ptr @fn_str_concat(ptr %t250, ptr @.str1117) + %t252 = call ptr @fn_emit_bind(ptr %t251) + %t253 = call ptr @fn_val(ptr %t252, ptr @.str1118) + store ptr %t253, ptr %retval + br label %ret +ifend32: + %t254 = load ptr, ptr %t0 + %t255 = call i32 @fn_str_eq(ptr %t254, ptr @.str1119) + %t256 = icmp ne i32 %t255, 0 + br i1 %t256, label %then33, label %ifend35 +then33: + store i32 1, ptr @g_g_uses_textrt + %t257 = load ptr, ptr %t1 + %t258 = getelementptr inbounds %Cmp_Node, ptr %t257, i32 0, i32 7 + %t259 = load ptr, ptr %t258 + %t260 = getelementptr inbounds %LSlice, ptr %t259, i32 0, i32 0 + %t261 = load ptr, ptr %t260 + %t262 = getelementptr inbounds ptr, ptr %t261, i32 1 + %t263 = load ptr, ptr %t262 + %t264 = call ptr @fn_emit_expr(ptr %t263) + store ptr %t264, ptr %t265 + %t266 = load ptr, ptr %t142 + %t267 = getelementptr inbounds %Cmp_Val, ptr %t266, i32 0, i32 0 + %t268 = load ptr, ptr %t267 + %t269 = call ptr @fn_str_concat(ptr @.str1120, ptr %t268) + %t270 = call ptr @fn_str_concat(ptr %t269, ptr @.str1121) + %t271 = load ptr, ptr %t265 + %t272 = getelementptr inbounds %Cmp_Val, ptr %t271, i32 0, i32 0 + %t273 = load ptr, ptr %t272 + %t274 = call ptr @fn_str_concat(ptr %t270, ptr %t273) + %t275 = call ptr @fn_str_concat(ptr %t274, ptr @.str1122) + %t276 = call ptr @fn_emit_bind(ptr %t275) + %t277 = call ptr @fn_val(ptr %t276, ptr @.str1123) + store ptr %t277, ptr %retval + br label %ret +ifend35: + %t278 = load ptr, ptr %t0 + %t279 = call i32 @fn_str_eq(ptr %t278, ptr @.str1124) + %t280 = icmp ne i32 %t279, 0 + br i1 %t280, label %then36, label %ifend38 +then36: + store i32 1, ptr @g_g_uses_textrt + %t281 = load ptr, ptr %t1 + %t282 = getelementptr inbounds %Cmp_Node, ptr %t281, i32 0, i32 7 + %t283 = load ptr, ptr %t282 + %t284 = getelementptr inbounds %LSlice, ptr %t283, i32 0, i32 0 + %t285 = load ptr, ptr %t284 + %t286 = getelementptr inbounds ptr, ptr %t285, i32 1 + %t287 = load ptr, ptr %t286 + %t288 = call ptr @fn_emit_expr(ptr %t287) + store ptr %t288, ptr %t289 + %t290 = load ptr, ptr %t142 + %t291 = getelementptr inbounds %Cmp_Val, ptr %t290, i32 0, i32 0 + %t292 = load ptr, ptr %t291 + %t293 = call ptr @fn_str_concat(ptr @.str1125, ptr %t292) + %t294 = call ptr @fn_str_concat(ptr %t293, ptr @.str1126) + %t295 = load ptr, ptr %t289 + %t296 = getelementptr inbounds %Cmp_Val, ptr %t295, i32 0, i32 0 + %t297 = load ptr, ptr %t296 + %t298 = call ptr @fn_str_concat(ptr %t294, ptr %t297) + %t299 = call ptr @fn_str_concat(ptr %t298, ptr @.str1127) + %t300 = call ptr @fn_emit_bind(ptr %t299) + %t301 = call ptr @fn_val(ptr %t300, ptr @.str1128) + store ptr %t301, ptr %retval + br label %ret +ifend38: + %t302 = load ptr, ptr %t0 + %t303 = call i32 @fn_str_eq(ptr %t302, ptr @.str1129) + %t304 = icmp ne i32 %t303, 0 + br i1 %t304, label %then39, label %ifend41 +then39: + store i32 1, ptr @g_g_uses_textrt2 + %t305 = load ptr, ptr %t1 + %t306 = getelementptr inbounds %Cmp_Node, ptr %t305, i32 0, i32 7 + %t307 = load ptr, ptr %t306 + %t308 = getelementptr inbounds %LSlice, ptr %t307, i32 0, i32 0 + %t309 = load ptr, ptr %t308 + %t310 = getelementptr inbounds ptr, ptr %t309, i32 1 + %t311 = load ptr, ptr %t310 + %t312 = call ptr @fn_emit_expr(ptr %t311) + store ptr %t312, ptr %t313 + %t314 = load ptr, ptr %t1 + %t315 = getelementptr inbounds %Cmp_Node, ptr %t314, i32 0, i32 7 + %t316 = load ptr, ptr %t315 + %t317 = getelementptr inbounds %LSlice, ptr %t316, i32 0, i32 0 + %t318 = load ptr, ptr %t317 + %t319 = getelementptr inbounds ptr, ptr %t318, i32 2 + %t320 = load ptr, ptr %t319 + %t321 = call ptr @fn_emit_expr(ptr %t320) + store ptr %t321, ptr %t322 + %t323 = load ptr, ptr %t142 + %t324 = getelementptr inbounds %Cmp_Val, ptr %t323, i32 0, i32 0 + %t325 = load ptr, ptr %t324 + %t326 = call ptr @fn_str_concat(ptr @.str1130, ptr %t325) + %t327 = call ptr @fn_str_concat(ptr %t326, ptr @.str1131) + %t328 = load ptr, ptr %t313 + %t329 = getelementptr inbounds %Cmp_Val, ptr %t328, i32 0, i32 0 + %t330 = load ptr, ptr %t329 + %t331 = call ptr @fn_str_concat(ptr %t327, ptr %t330) + %t332 = call ptr @fn_str_concat(ptr %t331, ptr @.str1132) + %t333 = load ptr, ptr %t322 + %t334 = getelementptr inbounds %Cmp_Val, ptr %t333, i32 0, i32 0 + %t335 = load ptr, ptr %t334 + %t336 = call ptr @fn_str_concat(ptr %t332, ptr %t335) + %t337 = call ptr @fn_str_concat(ptr %t336, ptr @.str1133) + %t338 = call ptr @fn_emit_bind(ptr %t337) + %t339 = call ptr @fn_val(ptr %t338, ptr @.str1134) + store ptr %t339, ptr %retval + br label %ret +ifend41: + %t340 = load ptr, ptr %t0 + %t341 = call i32 @fn_str_eq(ptr %t340, ptr @.str1135) + %t342 = icmp ne i32 %t341, 0 + br i1 %t342, label %then42, label %ifend44 +then42: + store i32 1, ptr @g_g_uses_textrt2 + %t343 = load ptr, ptr %t1 + %t344 = getelementptr inbounds %Cmp_Node, ptr %t343, i32 0, i32 7 + %t345 = load ptr, ptr %t344 + %t346 = getelementptr inbounds %LSlice, ptr %t345, i32 0, i32 0 + %t347 = load ptr, ptr %t346 + %t348 = getelementptr inbounds ptr, ptr %t347, i32 1 + %t349 = load ptr, ptr %t348 + %t350 = call ptr @fn_emit_expr(ptr %t349) + store ptr %t350, ptr %t351 + %t352 = load ptr, ptr %t142 + %t353 = getelementptr inbounds %Cmp_Val, ptr %t352, i32 0, i32 0 + %t354 = load ptr, ptr %t353 + %t355 = call ptr @fn_str_concat(ptr @.str1136, ptr %t354) + %t356 = call ptr @fn_str_concat(ptr %t355, ptr @.str1137) + %t357 = load ptr, ptr %t351 + %t358 = getelementptr inbounds %Cmp_Val, ptr %t357, i32 0, i32 0 + %t359 = load ptr, ptr %t358 + %t360 = call ptr @fn_str_concat(ptr %t356, ptr %t359) + %t361 = call ptr @fn_str_concat(ptr %t360, ptr @.str1138) + %t362 = call ptr @fn_emit_bind(ptr %t361) + %t363 = call ptr @fn_val(ptr %t362, ptr @.str1139) + store ptr %t363, ptr %retval + br label %ret +ifend44: + %t364 = load ptr, ptr %t0 + %t365 = call i32 @fn_str_eq(ptr %t364, ptr @.str1140) + %t366 = icmp ne i32 %t365, 0 + br i1 %t366, label %then45, label %ifend47 +then45: + store i32 1, ptr @g_g_uses_textrt2 + %t367 = load ptr, ptr %t1 + %t368 = getelementptr inbounds %Cmp_Node, ptr %t367, i32 0, i32 7 + %t369 = load ptr, ptr %t368 + %t370 = getelementptr inbounds %LSlice, ptr %t369, i32 0, i32 0 + %t371 = load ptr, ptr %t370 + %t372 = getelementptr inbounds ptr, ptr %t371, i32 1 + %t373 = load ptr, ptr %t372 + %t374 = call ptr @fn_emit_expr(ptr %t373) + store ptr %t374, ptr %t375 + %t376 = load ptr, ptr %t142 + %t377 = getelementptr inbounds %Cmp_Val, ptr %t376, i32 0, i32 0 + %t378 = load ptr, ptr %t377 + %t379 = call ptr @fn_str_concat(ptr @.str1141, ptr %t378) + %t380 = call ptr @fn_str_concat(ptr %t379, ptr @.str1142) + %t381 = load ptr, ptr %t375 + %t382 = getelementptr inbounds %Cmp_Val, ptr %t381, i32 0, i32 0 + %t383 = load ptr, ptr %t382 + %t384 = call ptr @fn_str_concat(ptr %t380, ptr %t383) + %t385 = call ptr @fn_str_concat(ptr %t384, ptr @.str1143) + %t386 = call ptr @fn_emit_bind(ptr %t385) + %t387 = call ptr @fn_val(ptr %t386, ptr @.str1144) + store ptr %t387, ptr %retval + br label %ret +ifend47: + %t389 = load ptr, ptr %t0 + %t390 = call i32 @fn_str_eq(ptr %t389, ptr @.str1145) + %t391 = icmp ne i32 %t390, 0 + %t392 = zext i1 %t391 to i32 + store i32 %t392, ptr %t388 + br i1 %t391, label %scend49, label %sc48 +sc48: + %t393 = load ptr, ptr %t0 + %t394 = call i32 @fn_str_eq(ptr %t393, ptr @.str1146) + %t395 = icmp ne i32 %t394, 0 + %t396 = zext i1 %t395 to i32 + store i32 %t396, ptr %t388 + br label %scend49 +scend49: + %t397 = load i32, ptr %t388 + %t398 = icmp ne i32 %t397, 0 + br i1 %t398, label %then50, label %ifend52 +then50: + %t399 = load ptr, ptr %t1 + %t400 = getelementptr inbounds %Cmp_Node, ptr %t399, i32 0, i32 7 + %t401 = load ptr, ptr %t400 + %t402 = getelementptr inbounds %LSlice, ptr %t401, i32 0, i32 0 + %t403 = load ptr, ptr %t402 + %t404 = getelementptr inbounds ptr, ptr %t403, i32 1 + %t405 = load ptr, ptr %t404 + %t406 = call ptr @fn_emit_expr(ptr %t405) + store ptr %t406, ptr %t407 + %t408 = load ptr, ptr %t142 + %t409 = getelementptr inbounds %Cmp_Val, ptr %t408, i32 0, i32 0 + %t410 = load ptr, ptr %t409 + %t411 = call ptr @fn_str_concat(ptr @.str1147, ptr %t410) + %t412 = call ptr @fn_str_concat(ptr %t411, ptr @.str1148) + %t413 = load ptr, ptr %t407 + %t414 = getelementptr inbounds %Cmp_Val, ptr %t413, i32 0, i32 0 + %t415 = load ptr, ptr %t414 + %t416 = call ptr @fn_str_concat(ptr %t412, ptr %t415) + %t417 = call ptr @fn_str_concat(ptr %t416, ptr @.str1149) + %t418 = call ptr @fn_emit_bind(ptr %t417) + store ptr %t418, ptr %t419 + %t420 = load ptr, ptr %t0 + %t421 = call i32 @fn_str_eq(ptr %t420, ptr @.str1150) + %t422 = icmp ne i32 %t421, 0 + br i1 %t422, label %then53, label %ifend55 +then53: + %t423 = load ptr, ptr %t419 + %t424 = call ptr @fn_str_concat(ptr @.str1151, ptr %t423) + %t425 = call ptr @fn_str_concat(ptr %t424, ptr @.str1152) + %t426 = call ptr @fn_emit_bind(ptr %t425) + store ptr %t426, ptr %t427 + %t428 = load ptr, ptr %t427 + %t429 = call ptr @fn_str_concat(ptr @.str1153, ptr %t428) + %t430 = call ptr @fn_str_concat(ptr %t429, ptr @.str1154) + %t431 = call ptr @fn_emit_bind(ptr %t430) + %t432 = call ptr @fn_val(ptr %t431, ptr @.str1155) + store ptr %t432, ptr %retval + br label %ret +ifend55: + %t433 = load ptr, ptr %t419 + %t434 = call ptr @fn_str_concat(ptr @.str1156, ptr %t433) + %t435 = call ptr @fn_str_concat(ptr %t434, ptr @.str1157) + %t436 = call ptr @fn_emit_bind(ptr %t435) + store ptr %t436, ptr %t437 + %t438 = load ptr, ptr %t419 + %t439 = call ptr @fn_str_concat(ptr @.str1158, ptr %t438) + %t440 = call ptr @fn_str_concat(ptr %t439, ptr @.str1159) + %t441 = call ptr @fn_emit_bind(ptr %t440) + store ptr %t441, ptr %t442 + %t443 = load ptr, ptr %t142 + %t444 = getelementptr inbounds %Cmp_Val, ptr %t443, i32 0, i32 0 + %t445 = load ptr, ptr %t444 + %t446 = call ptr @fn_str_concat(ptr @.str1160, ptr %t445) + %t447 = call ptr @fn_str_concat(ptr %t446, ptr @.str1161) + %t448 = call ptr @fn_emit_bind(ptr %t447) + store ptr %t448, ptr %t449 + %t450 = load ptr, ptr %t442 + %t451 = call ptr @fn_str_concat(ptr @.str1162, ptr %t450) + %t452 = call ptr @fn_str_concat(ptr %t451, ptr @.str1163) + %t453 = load ptr, ptr %t449 + %t454 = call ptr @fn_str_concat(ptr %t452, ptr %t453) + %t455 = call ptr @fn_emit_bind(ptr %t454) + store ptr %t455, ptr %t456 + %t457 = load ptr, ptr %t456 + %t458 = call ptr @fn_str_concat(ptr @.str1164, ptr %t457) + %t459 = call ptr @fn_str_concat(ptr %t458, ptr @.str1165) + %t460 = call ptr @fn_emit_bind(ptr %t459) + store ptr %t460, ptr %t461 + %t462 = load ptr, ptr %t437 + %t463 = call ptr @fn_str_concat(ptr @.str1166, ptr %t462) + %t464 = call ptr @fn_str_concat(ptr %t463, ptr @.str1167) + %t465 = load ptr, ptr %t461 + %t466 = call ptr @fn_str_concat(ptr %t464, ptr %t465) + %t467 = call ptr @fn_emit_bind(ptr %t466) + %t468 = call ptr @fn_val(ptr %t467, ptr @.str1168) + store ptr %t468, ptr %retval + br label %ret +ifend52: + %t469 = load ptr, ptr %t1 + %t470 = getelementptr inbounds %Cmp_Node, ptr %t469, i32 0, i32 7 + %t471 = load ptr, ptr %t470 + %t472 = getelementptr inbounds %LSlice, ptr %t471, i32 0, i32 0 + %t473 = load ptr, ptr %t472 + %t474 = getelementptr inbounds ptr, ptr %t473, i32 1 + %t475 = load ptr, ptr %t474 + %t476 = call ptr @fn_emit_expr(ptr %t475) + store ptr %t476, ptr %t477 + %t478 = load ptr, ptr %t477 + %t479 = getelementptr inbounds %Cmp_Val, ptr %t478, i32 0, i32 0 + %t480 = load ptr, ptr %t479 + %t481 = call ptr @fn_str_concat(ptr @.str1169, ptr %t480) + %t482 = call ptr @fn_str_concat(ptr %t481, ptr @.str1170) + %t483 = call ptr @fn_emit_bind(ptr %t482) + store ptr %t483, ptr %t484 + %t485 = load ptr, ptr %t0 + %t486 = call i32 @fn_str_eq(ptr %t485, ptr @.str1171) + %t487 = icmp ne i32 %t486, 0 + br i1 %t487, label %then56, label %ifend58 +then56: + %t488 = load ptr, ptr %t142 + %t489 = getelementptr inbounds %Cmp_Val, ptr %t488, i32 0, i32 0 + %t490 = load ptr, ptr %t489 + %t491 = call ptr @fn_str_concat(ptr @.str1172, ptr %t490) + %t492 = call ptr @fn_str_concat(ptr %t491, ptr @.str1173) + %t493 = load ptr, ptr %t477 + %t494 = getelementptr inbounds %Cmp_Val, ptr %t493, i32 0, i32 0 + %t495 = load ptr, ptr %t494 + %t496 = call ptr @fn_str_concat(ptr %t492, ptr %t495) + %t497 = call ptr @fn_str_concat(ptr %t496, ptr @.str1174) + %t498 = load ptr, ptr %t484 + %t499 = call ptr @fn_str_concat(ptr %t497, ptr %t498) + %t500 = call ptr @fn_str_concat(ptr %t499, ptr @.str1175) + %t501 = call ptr @fn_emit_bind(ptr %t500) + store ptr %t501, ptr %t502 + %t503 = load ptr, ptr %t502 + %t504 = call ptr @fn_str_concat(ptr @.str1176, ptr %t503) + %t505 = call ptr @fn_str_concat(ptr %t504, ptr @.str1177) + %t506 = call ptr @fn_emit_bind(ptr %t505) + store ptr %t506, ptr %t507 + %t508 = load ptr, ptr %t507 + %t509 = call ptr @fn_str_concat(ptr @.str1178, ptr %t508) + %t510 = call ptr @fn_str_concat(ptr %t509, ptr @.str1179) + %t511 = call ptr @fn_emit_bind(ptr %t510) + %t512 = call ptr @fn_val(ptr %t511, ptr @.str1180) + store ptr %t512, ptr %retval + br label %ret +ifend58: + %t513 = load ptr, ptr %t142 + %t514 = getelementptr inbounds %Cmp_Val, ptr %t513, i32 0, i32 0 + %t515 = load ptr, ptr %t514 + %t516 = call ptr @fn_str_concat(ptr @.str1181, ptr %t515) + %t517 = call ptr @fn_str_concat(ptr %t516, ptr @.str1182) + %t518 = call ptr @fn_emit_bind(ptr %t517) + store ptr %t518, ptr %t519 + %t520 = load ptr, ptr %t519 + %t521 = call ptr @fn_str_concat(ptr @.str1183, ptr %t520) + %t522 = call ptr @fn_str_concat(ptr %t521, ptr @.str1184) + %t523 = load ptr, ptr %t484 + %t524 = call ptr @fn_str_concat(ptr %t522, ptr %t523) + %t525 = call ptr @fn_emit_bind(ptr %t524) + store ptr %t525, ptr %t526 + %t527 = call ptr @fn_emit_alloca(ptr @.str1185) + store ptr %t527, ptr %t528 + %t529 = load ptr, ptr %t528 + call void @fn_store_at(ptr @.str1186, ptr @.str1187, ptr %t529) + %t530 = load ptr, ptr %t526 + %t531 = call ptr @fn_str_concat(ptr @.str1188, ptr %t530) + %t532 = call ptr @fn_str_concat(ptr %t531, ptr @.str1189) + %t533 = call ptr @fn_emit_bind(ptr %t532) + store ptr %t533, ptr %t534 + %t535 = call ptr @fn_lbl(ptr @.str1190) + store ptr %t535, ptr %t536 + %t537 = call ptr @fn_lbl(ptr @.str1191) + store ptr %t537, ptr %t538 + call void @fn_emit(ptr @.str1192) + %t539 = load ptr, ptr %t534 + call void @fn_emit(ptr %t539) + call void @fn_emit(ptr @.str1193) + %t540 = load ptr, ptr %t538 + call void @fn_emit(ptr %t540) + call void @fn_emit(ptr @.str1194) + %t541 = load ptr, ptr %t536 + call void @fn_emit(ptr %t541) + call void @fn_emit(ptr @.str1195) + %t542 = load ptr, ptr %t536 + call void @fn_emit(ptr %t542) + call void @fn_emit(ptr @.str1196) + %t543 = load ptr, ptr %t142 + %t544 = getelementptr inbounds %Cmp_Val, ptr %t543, i32 0, i32 0 + %t545 = load ptr, ptr %t544 + %t546 = call ptr @fn_str_concat(ptr @.str1197, ptr %t545) + %t547 = call ptr @fn_str_concat(ptr %t546, ptr @.str1198) + %t548 = load ptr, ptr %t526 + %t549 = call ptr @fn_str_concat(ptr %t547, ptr %t548) + %t550 = call ptr @fn_emit_bind(ptr %t549) + store ptr %t550, ptr %t551 + %t552 = load ptr, ptr %t551 + %t553 = call ptr @fn_str_concat(ptr @.str1199, ptr %t552) + %t554 = call ptr @fn_str_concat(ptr %t553, ptr @.str1200) + %t555 = load ptr, ptr %t477 + %t556 = getelementptr inbounds %Cmp_Val, ptr %t555, i32 0, i32 0 + %t557 = load ptr, ptr %t556 + %t558 = call ptr @fn_str_concat(ptr %t554, ptr %t557) + %t559 = call ptr @fn_str_concat(ptr %t558, ptr @.str1201) + %t560 = load ptr, ptr %t484 + %t561 = call ptr @fn_str_concat(ptr %t559, ptr %t560) + %t562 = call ptr @fn_str_concat(ptr %t561, ptr @.str1202) + %t563 = call ptr @fn_emit_bind(ptr %t562) + store ptr %t563, ptr %t564 + %t565 = load ptr, ptr %t564 + %t566 = call ptr @fn_str_concat(ptr @.str1203, ptr %t565) + %t567 = call ptr @fn_str_concat(ptr %t566, ptr @.str1204) + %t568 = call ptr @fn_emit_bind(ptr %t567) + store ptr %t568, ptr %t569 + %t570 = load ptr, ptr %t569 + %t571 = call ptr @fn_str_concat(ptr @.str1205, ptr %t570) + %t572 = call ptr @fn_str_concat(ptr %t571, ptr @.str1206) + %t573 = call ptr @fn_emit_bind(ptr %t572) + store ptr %t573, ptr %t574 + %t575 = load ptr, ptr %t574 + %t576 = load ptr, ptr %t528 + call void @fn_store_at(ptr @.str1207, ptr %t575, ptr %t576) + call void @fn_emit(ptr @.str1208) + %t577 = load ptr, ptr %t538 + call void @fn_emit(ptr %t577) + call void @fn_emit(ptr @.str1209) + %t578 = load ptr, ptr %t538 + call void @fn_emit(ptr %t578) + call void @fn_emit(ptr @.str1210) + %t579 = load ptr, ptr %t528 + %t580 = call ptr @fn_str_concat(ptr @.str1211, ptr %t579) + %t581 = call ptr @fn_emit_bind(ptr %t580) + %t582 = call ptr @fn_val(ptr %t581, ptr @.str1212) + store ptr %t582, ptr %retval + br label %ret +ret: + %t583 = load ptr, ptr %retval + ret ptr %t583 +} + +define void @fn_emit_text_prelude() { +entry: + call void @fn_emith(ptr @.str1213) + call void @fn_emith(ptr @.str1214) + call void @fn_emith(ptr @.str1215) + call void @fn_emith(ptr @.str1216) + call void @fn_emith(ptr @.str1217) + call void @fn_emith(ptr @.str1218) + call void @fn_emith(ptr @.str1219) + call void @fn_emith(ptr @.str1220) + call void @fn_emith(ptr @.str1221) + call void @fn_emith(ptr @.str1222) + call void @fn_emith(ptr @.str1223) + call void @fn_emith(ptr @.str1224) + call void @fn_emith(ptr @.str1225) + call void @fn_emith(ptr @.str1226) + call void @fn_emith(ptr @.str1227) + call void @fn_emith(ptr @.str1228) + call void @fn_emith(ptr @.str1229) + call void @fn_emith(ptr @.str1230) + call void @fn_emith(ptr @.str1231) + call void @fn_emith(ptr @.str1232) + call void @fn_emith(ptr @.str1233) + call void @fn_emith(ptr @.str1234) + call void @fn_emith(ptr @.str1235) + call void @fn_emith(ptr @.str1236) + call void @fn_emith(ptr @.str1237) + call void @fn_emith(ptr @.str1238) + call void @fn_emith(ptr @.str1239) + call void @fn_emith(ptr @.str1240) + call void @fn_emith(ptr @.str1241) + call void @fn_emith(ptr @.str1242) + call void @fn_emith(ptr @.str1243) + call void @fn_emith(ptr @.str1244) + call void @fn_emith(ptr @.str1245) + call void @fn_emith(ptr @.str1246) + call void @fn_emith(ptr @.str1247) + call void @fn_emith(ptr @.str1248) + call void @fn_emith(ptr @.str1249) + call void @fn_emith(ptr @.str1250) + call void @fn_emith(ptr @.str1251) + call void @fn_emith(ptr @.str1252) + call void @fn_emith(ptr @.str1253) + call void @fn_emith(ptr @.str1254) + call void @fn_emith(ptr @.str1255) + call void @fn_emith(ptr @.str1256) + call void @fn_emith(ptr @.str1257) + call void @fn_emith(ptr @.str1258) + call void @fn_emith(ptr @.str1259) + call void @fn_emith(ptr @.str1260) + call void @fn_emith(ptr @.str1261) + call void @fn_emith(ptr @.str1262) + call void @fn_emith(ptr @.str1263) + call void @fn_emith(ptr @.str1264) + call void @fn_emith(ptr @.str1265) + call void @fn_emith(ptr @.str1266) + call void @fn_emith(ptr @.str1267) + call void @fn_emith(ptr @.str1268) + call void @fn_emith(ptr @.str1269) + call void @fn_emith(ptr @.str1270) + call void @fn_emith(ptr @.str1271) + call void @fn_emith(ptr @.str1272) + call void @fn_emith(ptr @.str1273) + call void @fn_emith(ptr @.str1274) + call void @fn_emith(ptr @.str1275) + call void @fn_emith(ptr @.str1276) + call void @fn_emith(ptr @.str1277) + call void @fn_emith(ptr @.str1278) + call void @fn_emith(ptr @.str1279) + call void @fn_emith(ptr @.str1280) + call void @fn_emith(ptr @.str1281) + call void @fn_emith(ptr @.str1282) + call void @fn_emith(ptr @.str1283) + call void @fn_emith(ptr @.str1284) + call void @fn_emith(ptr @.str1285) + call void @fn_emith(ptr @.str1286) + call void @fn_emith(ptr @.str1287) + call void @fn_emith(ptr @.str1288) + call void @fn_emith(ptr @.str1289) + call void @fn_emith(ptr @.str1290) + call void @fn_emith(ptr @.str1291) + call void @fn_emith(ptr @.str1292) + call void @fn_emith(ptr @.str1293) + call void @fn_emith(ptr @.str1294) + call void @fn_emith(ptr @.str1295) + call void @fn_emith(ptr @.str1296) + call void @fn_emith(ptr @.str1297) + call void @fn_emith(ptr @.str1298) + call void @fn_emith(ptr @.str1299) + call void @fn_emith(ptr @.str1300) + call void @fn_emith(ptr @.str1301) + call void @fn_emith(ptr @.str1302) + call void @fn_emith(ptr @.str1303) + call void @fn_emith(ptr @.str1304) + call void @fn_emith(ptr @.str1305) + call void @fn_emith(ptr @.str1306) + call void @fn_emith(ptr @.str1307) + call void @fn_emith(ptr @.str1308) + call void @fn_emith(ptr @.str1309) + call void @fn_emith(ptr @.str1310) + call void @fn_emith(ptr @.str1311) + call void @fn_emith(ptr @.str1312) + call void @fn_emith(ptr @.str1313) + call void @fn_emith(ptr @.str1314) + call void @fn_emith(ptr @.str1315) + call void @fn_emith(ptr @.str1316) + call void @fn_emith(ptr @.str1317) + call void @fn_emith(ptr @.str1318) + call void @fn_emith(ptr @.str1319) + call void @fn_emith(ptr @.str1320) + call void @fn_emith(ptr @.str1321) + call void @fn_emith(ptr @.str1322) + call void @fn_emith(ptr @.str1323) + call void @fn_emith(ptr @.str1324) + call void @fn_emith(ptr @.str1325) + call void @fn_emith(ptr @.str1326) + call void @fn_emith(ptr @.str1327) + call void @fn_emith(ptr @.str1328) + call void @fn_emith(ptr @.str1329) + call void @fn_emith(ptr @.str1330) + call void @fn_emith(ptr @.str1331) + call void @fn_emith(ptr @.str1332) + call void @fn_emith(ptr @.str1333) + call void @fn_emith(ptr @.str1334) + call void @fn_emith(ptr @.str1335) + call void @fn_emith(ptr @.str1336) + call void @fn_emith(ptr @.str1337) + call void @fn_emith(ptr @.str1338) + call void @fn_emith(ptr @.str1339) + call void @fn_emith(ptr @.str1340) + call void @fn_emith(ptr @.str1341) + call void @fn_emith(ptr @.str1342) + call void @fn_emith(ptr @.str1343) + call void @fn_emith(ptr @.str1344) + call void @fn_emith(ptr @.str1345) + call void @fn_emith(ptr @.str1346) + call void @fn_emith(ptr @.str1347) + call void @fn_emith(ptr @.str1348) + call void @fn_emith(ptr @.str1349) + call void @fn_emith(ptr @.str1350) + call void @fn_emith(ptr @.str1351) + call void @fn_emith(ptr @.str1352) + call void @fn_emith(ptr @.str1353) + call void @fn_emith(ptr @.str1354) + call void @fn_emith(ptr @.str1355) + call void @fn_emith(ptr @.str1356) + call void @fn_emith(ptr @.str1357) + call void @fn_emith(ptr @.str1358) + call void @fn_emith(ptr @.str1359) + call void @fn_emith(ptr @.str1360) + call void @fn_emith(ptr @.str1361) + call void @fn_emith(ptr @.str1362) + call void @fn_emith(ptr @.str1363) + call void @fn_emith(ptr @.str1364) + call void @fn_emith(ptr @.str1365) + call void @fn_emith(ptr @.str1366) + call void @fn_emith(ptr @.str1367) + call void @fn_emith(ptr @.str1368) + call void @fn_emith(ptr @.str1369) + call void @fn_emith(ptr @.str1370) + call void @fn_emith(ptr @.str1371) + call void @fn_emith(ptr @.str1372) + call void @fn_emith(ptr @.str1373) + call void @fn_emith(ptr @.str1374) + call void @fn_emith(ptr @.str1375) + call void @fn_emith(ptr @.str1376) + call void @fn_emith(ptr @.str1377) + call void @fn_emith(ptr @.str1378) + call void @fn_emith(ptr @.str1379) + call void @fn_emith(ptr @.str1380) + call void @fn_emith(ptr @.str1381) + call void @fn_emith(ptr @.str1382) + call void @fn_emith(ptr @.str1383) + call void @fn_emith(ptr @.str1384) + call void @fn_emith(ptr @.str1385) + call void @fn_emith(ptr @.str1386) + call void @fn_emith(ptr @.str1387) + call void @fn_emith(ptr @.str1388) + call void @fn_emith(ptr @.str1389) + call void @fn_emith(ptr @.str1390) + call void @fn_emith(ptr @.str1391) + call void @fn_emith(ptr @.str1392) + call void @fn_emith(ptr @.str1393) + call void @fn_emith(ptr @.str1394) + call void @fn_emith(ptr @.str1395) + call void @fn_emith(ptr @.str1396) + call void @fn_emith(ptr @.str1397) + call void @fn_emith(ptr @.str1398) + call void @fn_emith(ptr @.str1399) + call void @fn_emith(ptr @.str1400) + call void @fn_emith(ptr @.str1401) + call void @fn_emith(ptr @.str1402) + call void @fn_emith(ptr @.str1403) + call void @fn_emith(ptr @.str1404) + call void @fn_emith(ptr @.str1405) + call void @fn_emith(ptr @.str1406) + call void @fn_emith(ptr @.str1407) + call void @fn_emith(ptr @.str1408) + call void @fn_emith(ptr @.str1409) + call void @fn_emith(ptr @.str1410) + br label %ret +ret: + ret void +} + +define void @fn_emit_text2_prelude() { +entry: + call void @fn_emith(ptr @.str1411) + call void @fn_emith(ptr @.str1412) + call void @fn_emith(ptr @.str1413) + call void @fn_emith(ptr @.str1414) + call void @fn_emith(ptr @.str1415) + call void @fn_emith(ptr @.str1416) + call void @fn_emith(ptr @.str1417) + call void @fn_emith(ptr @.str1418) + call void @fn_emith(ptr @.str1419) + call void @fn_emith(ptr @.str1420) + call void @fn_emith(ptr @.str1421) + call void @fn_emith(ptr @.str1422) + call void @fn_emith(ptr @.str1423) + call void @fn_emith(ptr @.str1424) + call void @fn_emith(ptr @.str1425) + call void @fn_emith(ptr @.str1426) + call void @fn_emith(ptr @.str1427) + call void @fn_emith(ptr @.str1428) + call void @fn_emith(ptr @.str1429) + call void @fn_emith(ptr @.str1430) + call void @fn_emith(ptr @.str1431) + call void @fn_emith(ptr @.str1432) + call void @fn_emith(ptr @.str1433) + call void @fn_emith(ptr @.str1434) + call void @fn_emith(ptr @.str1435) + call void @fn_emith(ptr @.str1436) + call void @fn_emith(ptr @.str1437) + call void @fn_emith(ptr @.str1438) + call void @fn_emith(ptr @.str1439) + call void @fn_emith(ptr @.str1440) + call void @fn_emith(ptr @.str1441) + call void @fn_emith(ptr @.str1442) + call void @fn_emith(ptr @.str1443) + call void @fn_emith(ptr @.str1444) + call void @fn_emith(ptr @.str1445) + call void @fn_emith(ptr @.str1446) + call void @fn_emith(ptr @.str1447) + call void @fn_emith(ptr @.str1448) + call void @fn_emith(ptr @.str1449) + call void @fn_emith(ptr @.str1450) + call void @fn_emith(ptr @.str1451) + call void @fn_emith(ptr @.str1452) + call void @fn_emith(ptr @.str1453) + call void @fn_emith(ptr @.str1454) + call void @fn_emith(ptr @.str1455) + call void @fn_emith(ptr @.str1456) + call void @fn_emith(ptr @.str1457) + call void @fn_emith(ptr @.str1458) + call void @fn_emith(ptr @.str1459) + call void @fn_emith(ptr @.str1460) + call void @fn_emith(ptr @.str1461) + call void @fn_emith(ptr @.str1462) + call void @fn_emith(ptr @.str1463) + call void @fn_emith(ptr @.str1464) + call void @fn_emith(ptr @.str1465) + call void @fn_emith(ptr @.str1466) + call void @fn_emith(ptr @.str1467) + call void @fn_emith(ptr @.str1468) + call void @fn_emith(ptr @.str1469) + call void @fn_emith(ptr @.str1470) + call void @fn_emith(ptr @.str1471) + call void @fn_emith(ptr @.str1472) + call void @fn_emith(ptr @.str1473) + call void @fn_emith(ptr @.str1474) + call void @fn_emith(ptr @.str1475) + call void @fn_emith(ptr @.str1476) + call void @fn_emith(ptr @.str1477) + call void @fn_emith(ptr @.str1478) + call void @fn_emith(ptr @.str1479) + call void @fn_emith(ptr @.str1480) + call void @fn_emith(ptr @.str1481) + call void @fn_emith(ptr @.str1482) + call void @fn_emith(ptr @.str1483) + call void @fn_emith(ptr @.str1484) + call void @fn_emith(ptr @.str1485) + call void @fn_emith(ptr @.str1486) + call void @fn_emith(ptr @.str1487) + call void @fn_emith(ptr @.str1488) + call void @fn_emith(ptr @.str1489) + call void @fn_emith(ptr @.str1490) + call void @fn_emith(ptr @.str1491) + call void @fn_emith(ptr @.str1492) + call void @fn_emith(ptr @.str1493) + call void @fn_emith(ptr @.str1494) + call void @fn_emith(ptr @.str1495) + call void @fn_emith(ptr @.str1496) + call void @fn_emith(ptr @.str1497) + call void @fn_emith(ptr @.str1498) + call void @fn_emith(ptr @.str1499) + call void @fn_emith(ptr @.str1500) + call void @fn_emith(ptr @.str1501) + call void @fn_emith(ptr @.str1502) + call void @fn_emith(ptr @.str1503) + call void @fn_emith(ptr @.str1504) + call void @fn_emith(ptr @.str1505) + call void @fn_emith(ptr @.str1506) + call void @fn_emith(ptr @.str1507) + call void @fn_emith(ptr @.str1508) + call void @fn_emith(ptr @.str1509) + call void @fn_emith(ptr @.str1510) + call void @fn_emith(ptr @.str1511) + call void @fn_emith(ptr @.str1512) + call void @fn_emith(ptr @.str1513) + call void @fn_emith(ptr @.str1514) + call void @fn_emith(ptr @.str1515) + call void @fn_emith(ptr @.str1516) + call void @fn_emith(ptr @.str1517) + call void @fn_emith(ptr @.str1518) + call void @fn_emith(ptr @.str1519) + call void @fn_emith(ptr @.str1520) + call void @fn_emith(ptr @.str1521) + call void @fn_emith(ptr @.str1522) + call void @fn_emith(ptr @.str1523) + call void @fn_emith(ptr @.str1524) + call void @fn_emith(ptr @.str1525) + call void @fn_emith(ptr @.str1526) + call void @fn_emith(ptr @.str1527) + call void @fn_emith(ptr @.str1528) + call void @fn_emith(ptr @.str1529) + call void @fn_emith(ptr @.str1530) + call void @fn_emith(ptr @.str1531) + call void @fn_emith(ptr @.str1532) + call void @fn_emith(ptr @.str1533) + call void @fn_emith(ptr @.str1534) + call void @fn_emith(ptr @.str1535) + call void @fn_emith(ptr @.str1536) + call void @fn_emith(ptr @.str1537) + call void @fn_emith(ptr @.str1538) + call void @fn_emith(ptr @.str1539) + call void @fn_emith(ptr @.str1540) + call void @fn_emith(ptr @.str1541) + call void @fn_emith(ptr @.str1542) + call void @fn_emith(ptr @.str1543) + call void @fn_emith(ptr @.str1544) + call void @fn_emith(ptr @.str1545) + call void @fn_emith(ptr @.str1546) + call void @fn_emith(ptr @.str1547) + call void @fn_emith(ptr @.str1548) + call void @fn_emith(ptr @.str1549) + call void @fn_emith(ptr @.str1550) + call void @fn_emith(ptr @.str1551) + call void @fn_emith(ptr @.str1552) + call void @fn_emith(ptr @.str1553) + call void @fn_emith(ptr @.str1554) + call void @fn_emith(ptr @.str1555) + call void @fn_emith(ptr @.str1556) + call void @fn_emith(ptr @.str1557) + call void @fn_emith(ptr @.str1558) + call void @fn_emith(ptr @.str1559) + call void @fn_emith(ptr @.str1560) + call void @fn_emith(ptr @.str1561) + call void @fn_emith(ptr @.str1562) + call void @fn_emith(ptr @.str1563) + call void @fn_emith(ptr @.str1564) + call void @fn_emith(ptr @.str1565) + call void @fn_emith(ptr @.str1566) + call void @fn_emith(ptr @.str1567) + call void @fn_emith(ptr @.str1568) + call void @fn_emith(ptr @.str1569) + call void @fn_emith(ptr @.str1570) + call void @fn_emith(ptr @.str1571) + call void @fn_emith(ptr @.str1572) + call void @fn_emith(ptr @.str1573) + call void @fn_emith(ptr @.str1574) + call void @fn_emith(ptr @.str1575) + call void @fn_emith(ptr @.str1576) + call void @fn_emith(ptr @.str1577) + call void @fn_emith(ptr @.str1578) + call void @fn_emith(ptr @.str1579) + call void @fn_emith(ptr @.str1580) + call void @fn_emith(ptr @.str1581) + call void @fn_emith(ptr @.str1582) + call void @fn_emith(ptr @.str1583) + call void @fn_emith(ptr @.str1584) + call void @fn_emith(ptr @.str1585) + call void @fn_emith(ptr @.str1586) + call void @fn_emith(ptr @.str1587) + call void @fn_emith(ptr @.str1588) + call void @fn_emith(ptr @.str1589) + call void @fn_emith(ptr @.str1590) + call void @fn_emith(ptr @.str1591) + call void @fn_emith(ptr @.str1592) + call void @fn_emith(ptr @.str1593) + call void @fn_emith(ptr @.str1594) + call void @fn_emith(ptr @.str1595) + call void @fn_emith(ptr @.str1596) + call void @fn_emith(ptr @.str1597) + call void @fn_emith(ptr @.str1598) + call void @fn_emith(ptr @.str1599) + call void @fn_emith(ptr @.str1600) + call void @fn_emith(ptr @.str1601) + call void @fn_emith(ptr @.str1602) + call void @fn_emith(ptr @.str1603) + call void @fn_emith(ptr @.str1604) + call void @fn_emith(ptr @.str1605) + call void @fn_emith(ptr @.str1606) + call void @fn_emith(ptr @.str1607) + call void @fn_emith(ptr @.str1608) + call void @fn_emith(ptr @.str1609) + call void @fn_emith(ptr @.str1610) + call void @fn_emith(ptr @.str1611) + call void @fn_emith(ptr @.str1612) + call void @fn_emith(ptr @.str1613) + call void @fn_emith(ptr @.str1614) + call void @fn_emith(ptr @.str1615) + call void @fn_emith(ptr @.str1616) + call void @fn_emith(ptr @.str1617) + call void @fn_emith(ptr @.str1618) + call void @fn_emith(ptr @.str1619) + call void @fn_emith(ptr @.str1620) + call void @fn_emith(ptr @.str1621) + br label %ret +ret: + ret void +} + +define ptr @fn_list_elem_addr(ptr %arg_h, ptr %arg_elt, ptr %arg_idx) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t5 = alloca ptr + %t9 = alloca ptr + store ptr %arg_h, ptr %t0 + store ptr %arg_elt, ptr %t1 + store ptr %arg_idx, ptr %t2 + %t3 = load ptr, ptr %t0 + %t4 = call ptr @fn_slice_field(ptr %t3, i32 0) + store ptr %t4, ptr %t5 + %t6 = load ptr, ptr %t5 + %t7 = call ptr @fn_str_concat(ptr @.str1622, ptr %t6) + %t8 = call ptr @fn_emit_bind(ptr %t7) + store ptr %t8, ptr %t9 + %t10 = load ptr, ptr %t1 + %t11 = call ptr @fn_str_concat(ptr @.str1623, ptr %t10) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str1624) + %t13 = load ptr, ptr %t9 + %t14 = call ptr @fn_str_concat(ptr %t12, ptr %t13) + %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str1625) + %t16 = load ptr, ptr %t2 + %t17 = call ptr @fn_str_concat(ptr %t15, ptr %t16) + %t18 = call ptr @fn_emit_bind(ptr %t17) + store ptr %t18, ptr %retval + br label %ret +ret: + %t19 = load ptr, ptr %retval + ret ptr %t19 +} + +define i32 @fn_is_list_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t20 = alloca i32 + %t21 = alloca i32 + %t22 = alloca i32 + %t47 = alloca i32 + %t48 = alloca i32 + %t66 = alloca i32 + %t67 = alloca i32 + %t68 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str1626) + %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_str_eq(ptr %t7, ptr @.str1627) + %t9 = icmp ne i32 %t8, 0 + %t10 = zext i1 %t9 to i32 + store i32 %t10, ptr %t2 + br label %scend1 +scend1: + %t11 = load i32, ptr %t2 + %t12 = icmp ne i32 %t11, 0 + %t13 = zext i1 %t12 to i32 + store i32 %t13, ptr %t1 + br i1 %t12, label %scend3, label %sc2 +sc2: + %t14 = load ptr, ptr %t0 + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str1628) + %t16 = icmp ne i32 %t15, 0 + %t17 = zext i1 %t16 to i32 + store i32 %t17, ptr %t1 + br label %scend3 +scend3: + %t18 = load i32, ptr %t1 + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then4, label %ifend6 +then4: + store i32 1, ptr %retval + br label %ret +ifend6: + %t23 = load ptr, ptr %t0 + %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str1629) + %t25 = icmp ne i32 %t24, 0 + %t26 = zext i1 %t25 to i32 + store i32 %t26, ptr %t22 + br i1 %t25, label %scend8, label %sc7 +sc7: + %t27 = load ptr, ptr %t0 + %t28 = call i32 @fn_str_eq(ptr %t27, ptr @.str1630) + %t29 = icmp ne i32 %t28, 0 + %t30 = zext i1 %t29 to i32 + store i32 %t30, ptr %t22 + br label %scend8 +scend8: + %t31 = load i32, ptr %t22 + %t32 = icmp ne i32 %t31, 0 + %t33 = zext i1 %t32 to i32 + store i32 %t33, ptr %t21 + br i1 %t32, label %scend10, label %sc9 +sc9: + %t34 = load ptr, ptr %t0 + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str1631) + %t36 = icmp ne i32 %t35, 0 + %t37 = zext i1 %t36 to i32 + store i32 %t37, ptr %t21 + br label %scend10 +scend10: + %t38 = load i32, ptr %t21 + %t39 = icmp ne i32 %t38, 0 + %t40 = zext i1 %t39 to i32 + store i32 %t40, ptr %t20 + br i1 %t39, label %scend12, label %sc11 +sc11: + %t41 = load ptr, ptr %t0 + %t42 = call i32 @fn_str_eq(ptr %t41, ptr @.str1632) + %t43 = icmp ne i32 %t42, 0 + %t44 = zext i1 %t43 to i32 + store i32 %t44, ptr %t20 + br label %scend12 +scend12: + %t45 = load i32, ptr %t20 + %t46 = icmp ne i32 %t45, 0 + br i1 %t46, label %then13, label %ifend15 +then13: + store i32 1, ptr %retval + br label %ret +ifend15: + %t49 = load ptr, ptr %t0 + %t50 = call i32 @fn_str_eq(ptr %t49, ptr @.str1633) + %t51 = icmp ne i32 %t50, 0 + %t52 = zext i1 %t51 to i32 + store i32 %t52, ptr %t48 + br i1 %t51, label %scend17, label %sc16 +sc16: + %t53 = load ptr, ptr %t0 + %t54 = call i32 @fn_str_eq(ptr %t53, ptr @.str1634) + %t55 = icmp ne i32 %t54, 0 + %t56 = zext i1 %t55 to i32 + store i32 %t56, ptr %t48 + br label %scend17 +scend17: + %t57 = load i32, ptr %t48 + %t58 = icmp ne i32 %t57, 0 + %t59 = zext i1 %t58 to i32 + store i32 %t59, ptr %t47 + br i1 %t58, label %scend19, label %sc18 +sc18: + %t60 = load ptr, ptr %t0 + %t61 = call i32 @fn_str_eq(ptr %t60, ptr @.str1635) + %t62 = icmp ne i32 %t61, 0 + %t63 = zext i1 %t62 to i32 + store i32 %t63, ptr %t47 + br label %scend19 +scend19: + %t64 = load i32, ptr %t47 + %t65 = icmp ne i32 %t64, 0 + br i1 %t65, label %then20, label %ifend22 +then20: + store i32 1, ptr %retval + br label %ret +ifend22: + %t69 = load ptr, ptr %t0 + %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str1636) + %t71 = icmp ne i32 %t70, 0 + %t72 = zext i1 %t71 to i32 + store i32 %t72, ptr %t68 + br i1 %t71, label %scend24, label %sc23 +sc23: + %t73 = load ptr, ptr %t0 + %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str1637) + %t75 = icmp ne i32 %t74, 0 + %t76 = zext i1 %t75 to i32 + store i32 %t76, ptr %t68 + br label %scend24 +scend24: + %t77 = load i32, ptr %t68 + %t78 = icmp ne i32 %t77, 0 + %t79 = zext i1 %t78 to i32 + store i32 %t79, ptr %t67 + br i1 %t78, label %scend26, label %sc25 +sc25: + %t80 = load ptr, ptr %t0 + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str1638) + %t82 = icmp ne i32 %t81, 0 + %t83 = zext i1 %t82 to i32 + store i32 %t83, ptr %t67 + br label %scend26 +scend26: + %t84 = load i32, ptr %t67 + %t85 = icmp ne i32 %t84, 0 + %t86 = zext i1 %t85 to i32 + store i32 %t86, ptr %t66 + br i1 %t85, label %scend28, label %sc27 +sc27: + %t87 = load ptr, ptr %t0 + %t88 = call i32 @fn_str_eq(ptr %t87, ptr @.str1639) + %t89 = icmp ne i32 %t88, 0 + %t90 = zext i1 %t89 to i32 + store i32 %t90, ptr %t66 + br label %scend28 +scend28: + %t91 = load i32, ptr %t66 + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then29, label %ifend31 +then29: + store i32 1, ptr %retval + br label %ret +ifend31: + store i32 0, ptr %retval + br label %ret +ret: + %t93 = load i32, ptr %retval + ret i32 %t93 +} + +define void @fn_list_grow_if_full(ptr %arg_h, ptr %arg_elt) { +entry: + %t0 = alloca ptr + %t1 = alloca ptr + %t4 = alloca ptr + %t7 = alloca ptr + %t10 = alloca ptr + %t14 = alloca ptr + %t18 = alloca ptr + %t25 = alloca ptr + %t27 = alloca ptr + %t29 = alloca ptr + %t38 = alloca ptr + %t43 = alloca ptr + %t50 = alloca ptr + %t53 = alloca ptr + %t58 = alloca ptr + %t65 = alloca ptr + %t69 = alloca ptr + %t77 = alloca ptr + store ptr %arg_h, ptr %t0 + store ptr %arg_elt, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_slice_field(ptr %t2, i32 1) + store ptr %t3, ptr %t4 + %t5 = load ptr, ptr %t0 + %t6 = call ptr @fn_slice_field(ptr %t5, i32 2) + store ptr %t6, ptr %t7 + %t8 = load ptr, ptr %t0 + %t9 = call ptr @fn_slice_field(ptr %t8, i32 0) + store ptr %t9, ptr %t10 + %t11 = load ptr, ptr %t4 + %t12 = call ptr @fn_str_concat(ptr @.str1640, ptr %t11) + %t13 = call ptr @fn_emit_bind(ptr %t12) + store ptr %t13, ptr %t14 + %t15 = load ptr, ptr %t7 + %t16 = call ptr @fn_str_concat(ptr @.str1641, ptr %t15) + %t17 = call ptr @fn_emit_bind(ptr %t16) + store ptr %t17, ptr %t18 + %t19 = load ptr, ptr %t14 + %t20 = call ptr @fn_str_concat(ptr @.str1642, ptr %t19) + %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str1643) + %t22 = load ptr, ptr %t18 + %t23 = call ptr @fn_str_concat(ptr %t21, ptr %t22) + %t24 = call ptr @fn_emit_bind(ptr %t23) + store ptr %t24, ptr %t25 + %t26 = call ptr @fn_lbl(ptr @.str1644) + store ptr %t26, ptr %t27 + %t28 = call ptr @fn_lbl(ptr @.str1645) + store ptr %t28, ptr %t29 + call void @fn_emit(ptr @.str1646) + %t30 = load ptr, ptr %t25 + call void @fn_emit(ptr %t30) + call void @fn_emit(ptr @.str1647) + %t31 = load ptr, ptr %t27 + call void @fn_emit(ptr %t31) + call void @fn_emit(ptr @.str1648) + %t32 = load ptr, ptr %t29 + call void @fn_emit(ptr %t32) + call void @fn_emit(ptr @.str1649) + %t33 = load ptr, ptr %t27 + call void @fn_emit(ptr %t33) + call void @fn_emit(ptr @.str1650) + %t34 = load ptr, ptr %t18 + %t35 = call ptr @fn_str_concat(ptr @.str1651, ptr %t34) + %t36 = call ptr @fn_str_concat(ptr %t35, ptr @.str1652) + %t37 = call ptr @fn_emit_bind(ptr %t36) + store ptr %t37, ptr %t38 + %t39 = load ptr, ptr %t18 + %t40 = call ptr @fn_str_concat(ptr @.str1653, ptr %t39) + %t41 = call ptr @fn_str_concat(ptr %t40, ptr @.str1654) + %t42 = call ptr @fn_emit_bind(ptr %t41) + store ptr %t42, ptr %t43 + %t44 = load ptr, ptr %t43 + %t45 = call ptr @fn_str_concat(ptr @.str1655, ptr %t44) + %t46 = call ptr @fn_str_concat(ptr %t45, ptr @.str1656) + %t47 = load ptr, ptr %t38 + %t48 = call ptr @fn_str_concat(ptr %t46, ptr %t47) + %t49 = call ptr @fn_emit_bind(ptr %t48) + store ptr %t49, ptr %t50 + %t51 = load ptr, ptr %t1 + %t52 = call ptr @fn_emit_sizeof(ptr %t51) + store ptr %t52, ptr %t53 + %t54 = load ptr, ptr %t50 + %t55 = call ptr @fn_str_concat(ptr @.str1657, ptr %t54) + %t56 = call ptr @fn_str_concat(ptr %t55, ptr @.str1658) + %t57 = call ptr @fn_emit_bind(ptr %t56) + store ptr %t57, ptr %t58 + %t59 = load ptr, ptr %t58 + %t60 = call ptr @fn_str_concat(ptr @.str1659, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str1660) + %t62 = load ptr, ptr %t53 + %t63 = call ptr @fn_str_concat(ptr %t61, ptr %t62) + %t64 = call ptr @fn_emit_bind(ptr %t63) + store ptr %t64, ptr %t65 + %t66 = load ptr, ptr %t10 + %t67 = call ptr @fn_str_concat(ptr @.str1661, ptr %t66) + %t68 = call ptr @fn_emit_bind(ptr %t67) + store ptr %t68, ptr %t69 + %t70 = load ptr, ptr %t69 + %t71 = call ptr @fn_str_concat(ptr @.str1662, ptr %t70) + %t72 = call ptr @fn_str_concat(ptr %t71, ptr @.str1663) + %t73 = load ptr, ptr %t65 + %t74 = call ptr @fn_str_concat(ptr %t72, ptr %t73) + %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str1664) + %t76 = call ptr @fn_emit_bind(ptr %t75) + store ptr %t76, ptr %t77 + call void @fn_emit(ptr @.str1665) + %t78 = load ptr, ptr %t77 + call void @fn_emit(ptr %t78) + call void @fn_emit(ptr @.str1666) + %t79 = load ptr, ptr %t10 + call void @fn_emit(ptr %t79) + call void @fn_emit(ptr @.str1667) + call void @fn_emit(ptr @.str1668) + %t80 = load ptr, ptr %t50 + call void @fn_emit(ptr %t80) + call void @fn_emit(ptr @.str1669) + %t81 = load ptr, ptr %t7 + call void @fn_emit(ptr %t81) + call void @fn_emit(ptr @.str1670) + call void @fn_emit(ptr @.str1671) + %t82 = load ptr, ptr %t29 + call void @fn_emit(ptr %t82) + call void @fn_emit(ptr @.str1672) + %t83 = load ptr, ptr %t29 + call void @fn_emit(ptr %t83) + call void @fn_emit(ptr @.str1673) + br label %ret +ret: + ret void +} + +define ptr @fn_emit_list_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t20 = alloca ptr + %t35 = alloca ptr + %t38 = alloca ptr + %t42 = alloca ptr + %t45 = alloca ptr + %t57 = alloca ptr + %t72 = alloca ptr + %t77 = alloca ptr + %t82 = alloca ptr + %t97 = alloca ptr + %t102 = alloca ptr + %t107 = alloca ptr + %t114 = alloca ptr + %t131 = alloca ptr + %t140 = alloca ptr + %t147 = alloca ptr + %t154 = alloca ptr + %t161 = alloca ptr + %t168 = alloca ptr + %t176 = alloca i32 + %t195 = alloca ptr + %t199 = alloca ptr + %t201 = alloca ptr + %t204 = alloca ptr + %t207 = alloca ptr + %t209 = alloca ptr + %t211 = alloca ptr + %t213 = alloca ptr + %t215 = alloca ptr + %t221 = alloca ptr + %t228 = alloca ptr + %t237 = alloca ptr + %t244 = alloca ptr + %t256 = alloca ptr + %t269 = alloca ptr + %t277 = alloca ptr + %t287 = alloca ptr + %t304 = alloca ptr + %t313 = alloca ptr + %t319 = alloca ptr + %t321 = alloca ptr + %t325 = alloca ptr + %t327 = alloca ptr + %t329 = alloca ptr + %t335 = alloca ptr + %t344 = alloca ptr + %t353 = alloca ptr + %t358 = alloca ptr + %t365 = alloca ptr + %t370 = alloca ptr + %t384 = alloca ptr + %t394 = alloca ptr + %t409 = alloca ptr + %t413 = alloca ptr + %t418 = alloca ptr + %t420 = alloca ptr + %t426 = alloca ptr + %t428 = alloca ptr + %t430 = alloca ptr + %t436 = alloca ptr + %t443 = alloca ptr + %t452 = alloca ptr + %t457 = alloca ptr + %t464 = alloca ptr + %t469 = alloca ptr + %t491 = alloca ptr + %t495 = alloca ptr + %t497 = alloca ptr + %t500 = alloca ptr + %t503 = alloca ptr + %t505 = alloca ptr + %t507 = alloca ptr + %t509 = alloca ptr + %t511 = alloca ptr + %t517 = alloca ptr + %t524 = alloca ptr + %t528 = alloca ptr + %t533 = alloca ptr + %t540 = alloca ptr + %t549 = alloca ptr + %t556 = alloca ptr + %t568 = alloca ptr + %t581 = alloca ptr + %t589 = alloca ptr + %t594 = alloca ptr + %t596 = alloca ptr + %t598 = alloca ptr + %t607 = alloca ptr + %t609 = alloca ptr + %t613 = alloca ptr + %t615 = alloca ptr + %t617 = alloca ptr + %t623 = alloca ptr + %t630 = alloca ptr + %t639 = alloca ptr + %t644 = alloca ptr + %t651 = alloca ptr + %t656 = alloca ptr + %t675 = alloca ptr + %t677 = alloca ptr + %t680 = alloca ptr + %t682 = alloca ptr + %t684 = alloca ptr + %t690 = alloca ptr + %t697 = alloca ptr + %t706 = alloca ptr + %t713 = alloca ptr + %t715 = alloca ptr + %t720 = alloca ptr + %t724 = alloca ptr + %t726 = alloca ptr + %t728 = alloca ptr + %t734 = alloca ptr + %t739 = alloca ptr + %t744 = alloca ptr + %t751 = alloca ptr + %t761 = alloca ptr + %t768 = alloca ptr + %t777 = alloca ptr + %t782 = alloca ptr + %t790 = alloca ptr + %t798 = alloca ptr + %t803 = alloca ptr + %t808 = alloca ptr + %t816 = alloca ptr + %t825 = alloca ptr + %t827 = alloca ptr + %t830 = alloca ptr + %t835 = alloca ptr + %t839 = alloca ptr + %t841 = alloca ptr + %t843 = alloca ptr + %t849 = alloca ptr + %t853 = alloca ptr + %t860 = alloca ptr + %t869 = alloca ptr + %t874 = alloca ptr + %t881 = alloca ptr + %t888 = alloca ptr + %t899 = alloca ptr + %t906 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str1674) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = load ptr, ptr %t1 + %t6 = call ptr @fn_emit_len(ptr %t5) + store ptr %t6, ptr %retval + br label %ret +ifend2: + %t7 = load ptr, ptr %t0 + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str1675) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then3, label %ifend5 +then3: + %t10 = load ptr, ptr %t1 + %t11 = call ptr @fn_emit_push(ptr %t10) + store ptr %t11, ptr %retval + br label %ret +ifend5: + %t12 = load ptr, ptr %t1 + %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 7 + %t14 = load ptr, ptr %t13 + %t15 = getelementptr inbounds %LSlice, ptr %t14, i32 0, i32 0 + %t16 = load ptr, ptr %t15 + %t17 = getelementptr inbounds ptr, ptr %t16, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = call ptr @fn_emit_expr(ptr %t18) + store ptr %t19, ptr %t20 + %t21 = load ptr, ptr %t20 + %t22 = getelementptr inbounds %Cmp_Val, ptr %t21, i32 0, i32 1 + %t23 = load ptr, ptr %t22 + %t24 = call i32 @fn_is_slice_ty(ptr %t23) + %t25 = icmp eq i32 %t24, 0 + %t26 = zext i1 %t25 to i32 + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then6, label %ifend8 +then6: + %t28 = load ptr, ptr %t0 + %t29 = call ptr @fn_str_concat(ptr @.str1676, ptr %t28) + %t30 = call ptr @fn_str_concat(ptr %t29, ptr @.str1677) + call void @fn_perr(ptr %t30) + br label %ifend8 +ifend8: + %t31 = load ptr, ptr %t20 + %t32 = getelementptr inbounds %Cmp_Val, ptr %t31, i32 0, i32 1 + %t33 = load ptr, ptr %t32 + %t34 = call ptr @fn_slice_elem(ptr %t33) + store ptr %t34, ptr %t35 + %t36 = load ptr, ptr %t35 + %t37 = call ptr @fn_llty(ptr %t36) + store ptr %t37, ptr %t38 + %t39 = load ptr, ptr %t20 + %t40 = getelementptr inbounds %Cmp_Val, ptr %t39, i32 0, i32 0 + %t41 = load ptr, ptr %t40 + store ptr %t41, ptr %t42 + %t43 = load ptr, ptr %t42 + %t44 = call ptr @fn_slice_field(ptr %t43, i32 1) + store ptr %t44, ptr %t45 + %t46 = load ptr, ptr %t0 + %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str1678) + %t48 = icmp ne i32 %t47, 0 + br i1 %t48, label %then9, label %ifend11 +then9: + call void @fn_emit(ptr @.str1679) + %t49 = load ptr, ptr %t45 + call void @fn_emit(ptr %t49) + call void @fn_emit(ptr @.str1680) + %t50 = call ptr @fn_val(ptr @.str1681, ptr @.str1682) + store ptr %t50, ptr %retval + br label %ret +ifend11: + %t51 = load ptr, ptr %t0 + %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str1683) + %t53 = icmp ne i32 %t52, 0 + br i1 %t53, label %then12, label %ifend14 +then12: + %t54 = load ptr, ptr %t42 + %t55 = load ptr, ptr %t38 + %t56 = call ptr @fn_list_elem_addr(ptr %t54, ptr %t55, ptr @.str1684) + store ptr %t56, ptr %t57 + %t58 = load ptr, ptr %t38 + %t59 = call ptr @fn_str_concat(ptr @.str1685, ptr %t58) + %t60 = call ptr @fn_str_concat(ptr %t59, ptr @.str1686) + %t61 = load ptr, ptr %t57 + %t62 = call ptr @fn_str_concat(ptr %t60, ptr %t61) + %t63 = call ptr @fn_emit_bind(ptr %t62) + %t64 = load ptr, ptr %t35 + %t65 = call ptr @fn_val(ptr %t63, ptr %t64) + store ptr %t65, ptr %retval + br label %ret +ifend14: + %t66 = load ptr, ptr %t0 + %t67 = call i32 @fn_str_eq(ptr %t66, ptr @.str1687) + %t68 = icmp ne i32 %t67, 0 + br i1 %t68, label %then15, label %ifend17 +then15: + %t69 = load ptr, ptr %t45 + %t70 = call ptr @fn_str_concat(ptr @.str1688, ptr %t69) + %t71 = call ptr @fn_emit_bind(ptr %t70) + store ptr %t71, ptr %t72 + %t73 = load ptr, ptr %t72 + %t74 = call ptr @fn_str_concat(ptr @.str1689, ptr %t73) + %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str1690) + %t76 = call ptr @fn_emit_bind(ptr %t75) + store ptr %t76, ptr %t77 + %t78 = load ptr, ptr %t42 + %t79 = load ptr, ptr %t38 + %t80 = load ptr, ptr %t77 + %t81 = call ptr @fn_list_elem_addr(ptr %t78, ptr %t79, ptr %t80) + store ptr %t81, ptr %t82 + %t83 = load ptr, ptr %t38 + %t84 = call ptr @fn_str_concat(ptr @.str1691, ptr %t83) + %t85 = call ptr @fn_str_concat(ptr %t84, ptr @.str1692) + %t86 = load ptr, ptr %t82 + %t87 = call ptr @fn_str_concat(ptr %t85, ptr %t86) + %t88 = call ptr @fn_emit_bind(ptr %t87) + %t89 = load ptr, ptr %t35 + %t90 = call ptr @fn_val(ptr %t88, ptr %t89) + store ptr %t90, ptr %retval + br label %ret +ifend17: + %t91 = load ptr, ptr %t0 + %t92 = call i32 @fn_str_eq(ptr %t91, ptr @.str1693) + %t93 = icmp ne i32 %t92, 0 + br i1 %t93, label %then18, label %ifend20 +then18: + %t94 = load ptr, ptr %t45 + %t95 = call ptr @fn_str_concat(ptr @.str1694, ptr %t94) + %t96 = call ptr @fn_emit_bind(ptr %t95) + store ptr %t96, ptr %t97 + %t98 = load ptr, ptr %t97 + %t99 = call ptr @fn_str_concat(ptr @.str1695, ptr %t98) + %t100 = call ptr @fn_str_concat(ptr %t99, ptr @.str1696) + %t101 = call ptr @fn_emit_bind(ptr %t100) + store ptr %t101, ptr %t102 + %t103 = load ptr, ptr %t42 + %t104 = load ptr, ptr %t38 + %t105 = load ptr, ptr %t102 + %t106 = call ptr @fn_list_elem_addr(ptr %t103, ptr %t104, ptr %t105) + store ptr %t106, ptr %t107 + %t108 = load ptr, ptr %t38 + %t109 = call ptr @fn_str_concat(ptr @.str1697, ptr %t108) + %t110 = call ptr @fn_str_concat(ptr %t109, ptr @.str1698) + %t111 = load ptr, ptr %t107 + %t112 = call ptr @fn_str_concat(ptr %t110, ptr %t111) + %t113 = call ptr @fn_emit_bind(ptr %t112) + store ptr %t113, ptr %t114 + call void @fn_emit(ptr @.str1699) + %t115 = load ptr, ptr %t102 + call void @fn_emit(ptr %t115) + call void @fn_emit(ptr @.str1700) + %t116 = load ptr, ptr %t45 + call void @fn_emit(ptr %t116) + call void @fn_emit(ptr @.str1701) + %t117 = load ptr, ptr %t114 + %t118 = load ptr, ptr %t35 + %t119 = call ptr @fn_val(ptr %t117, ptr %t118) + store ptr %t119, ptr %retval + br label %ret +ifend20: + %t120 = load ptr, ptr %t0 + %t121 = call i32 @fn_str_eq(ptr %t120, ptr @.str1702) + %t122 = icmp ne i32 %t121, 0 + br i1 %t122, label %then21, label %ifend23 +then21: + %t123 = load ptr, ptr %t1 + %t124 = getelementptr inbounds %Cmp_Node, ptr %t123, i32 0, i32 7 + %t125 = load ptr, ptr %t124 + %t126 = getelementptr inbounds %LSlice, ptr %t125, i32 0, i32 0 + %t127 = load ptr, ptr %t126 + %t128 = getelementptr inbounds ptr, ptr %t127, i32 1 + %t129 = load ptr, ptr %t128 + %t130 = call ptr @fn_emit_expr(ptr %t129) + store ptr %t130, ptr %t131 + %t132 = load ptr, ptr %t1 + %t133 = getelementptr inbounds %Cmp_Node, ptr %t132, i32 0, i32 7 + %t134 = load ptr, ptr %t133 + %t135 = getelementptr inbounds %LSlice, ptr %t134, i32 0, i32 0 + %t136 = load ptr, ptr %t135 + %t137 = getelementptr inbounds ptr, ptr %t136, i32 2 + %t138 = load ptr, ptr %t137 + %t139 = call ptr @fn_emit_expr(ptr %t138) + store ptr %t139, ptr %t140 + %t141 = load ptr, ptr %t42 + %t142 = load ptr, ptr %t38 + %t143 = load ptr, ptr %t131 + %t144 = getelementptr inbounds %Cmp_Val, ptr %t143, i32 0, i32 0 + %t145 = load ptr, ptr %t144 + %t146 = call ptr @fn_list_elem_addr(ptr %t141, ptr %t142, ptr %t145) + store ptr %t146, ptr %t147 + %t148 = load ptr, ptr %t42 + %t149 = load ptr, ptr %t38 + %t150 = load ptr, ptr %t140 + %t151 = getelementptr inbounds %Cmp_Val, ptr %t150, i32 0, i32 0 + %t152 = load ptr, ptr %t151 + %t153 = call ptr @fn_list_elem_addr(ptr %t148, ptr %t149, ptr %t152) + store ptr %t153, ptr %t154 + %t155 = load ptr, ptr %t38 + %t156 = call ptr @fn_str_concat(ptr @.str1703, ptr %t155) + %t157 = call ptr @fn_str_concat(ptr %t156, ptr @.str1704) + %t158 = load ptr, ptr %t147 + %t159 = call ptr @fn_str_concat(ptr %t157, ptr %t158) + %t160 = call ptr @fn_emit_bind(ptr %t159) + store ptr %t160, ptr %t161 + %t162 = load ptr, ptr %t38 + %t163 = call ptr @fn_str_concat(ptr @.str1705, ptr %t162) + %t164 = call ptr @fn_str_concat(ptr %t163, ptr @.str1706) + %t165 = load ptr, ptr %t154 + %t166 = call ptr @fn_str_concat(ptr %t164, ptr %t165) + %t167 = call ptr @fn_emit_bind(ptr %t166) + store ptr %t167, ptr %t168 + call void @fn_emit(ptr @.str1707) + %t169 = load ptr, ptr %t38 + call void @fn_emit(ptr %t169) + call void @fn_emit(ptr @.str1708) + %t170 = load ptr, ptr %t168 + call void @fn_emit(ptr %t170) + call void @fn_emit(ptr @.str1709) + %t171 = load ptr, ptr %t147 + call void @fn_emit(ptr %t171) + call void @fn_emit(ptr @.str1710) + call void @fn_emit(ptr @.str1711) + %t172 = load ptr, ptr %t38 + call void @fn_emit(ptr %t172) + call void @fn_emit(ptr @.str1712) + %t173 = load ptr, ptr %t161 + call void @fn_emit(ptr %t173) + call void @fn_emit(ptr @.str1713) + %t174 = load ptr, ptr %t154 + call void @fn_emit(ptr %t174) + call void @fn_emit(ptr @.str1714) + %t175 = call ptr @fn_val(ptr @.str1715, ptr @.str1716) + store ptr %t175, ptr %retval + br label %ret +ifend23: + %t177 = load ptr, ptr %t0 + %t178 = call i32 @fn_str_eq(ptr %t177, ptr @.str1717) + %t179 = icmp ne i32 %t178, 0 + %t180 = zext i1 %t179 to i32 + store i32 %t180, ptr %t176 + br i1 %t179, label %scend25, label %sc24 +sc24: + %t181 = load ptr, ptr %t0 + %t182 = call i32 @fn_str_eq(ptr %t181, ptr @.str1718) + %t183 = icmp ne i32 %t182, 0 + %t184 = zext i1 %t183 to i32 + store i32 %t184, ptr %t176 + br label %scend25 +scend25: + %t185 = load i32, ptr %t176 + %t186 = icmp ne i32 %t185, 0 + br i1 %t186, label %then26, label %ifend28 +then26: + %t187 = load ptr, ptr %t1 + %t188 = getelementptr inbounds %Cmp_Node, ptr %t187, i32 0, i32 7 + %t189 = load ptr, ptr %t188 + %t190 = getelementptr inbounds %LSlice, ptr %t189, i32 0, i32 0 + %t191 = load ptr, ptr %t190 + %t192 = getelementptr inbounds ptr, ptr %t191, i32 1 + %t193 = load ptr, ptr %t192 + %t194 = call ptr @fn_emit_expr(ptr %t193) + store ptr %t194, ptr %t195 + %t196 = load ptr, ptr %t45 + %t197 = call ptr @fn_str_concat(ptr @.str1719, ptr %t196) + %t198 = call ptr @fn_emit_bind(ptr %t197) + store ptr %t198, ptr %t199 + %t200 = call ptr @fn_emit_alloca(ptr @.str1720) + store ptr %t200, ptr %t201 + %t202 = load ptr, ptr %t201 + call void @fn_store_at(ptr @.str1721, ptr @.str1722, ptr %t202) + %t203 = call ptr @fn_emit_alloca(ptr @.str1723) + store ptr %t203, ptr %t204 + %t205 = load ptr, ptr %t204 + call void @fn_store_at(ptr @.str1724, ptr @.str1725, ptr %t205) + %t206 = call ptr @fn_lbl(ptr @.str1726) + store ptr %t206, ptr %t207 + %t208 = call ptr @fn_lbl(ptr @.str1727) + store ptr %t208, ptr %t209 + %t210 = call ptr @fn_lbl(ptr @.str1728) + store ptr %t210, ptr %t211 + %t212 = call ptr @fn_lbl(ptr @.str1729) + store ptr %t212, ptr %t213 + %t214 = call ptr @fn_lbl(ptr @.str1730) + store ptr %t214, ptr %t215 + call void @fn_emit(ptr @.str1731) + %t216 = load ptr, ptr %t207 + call void @fn_emit(ptr %t216) + call void @fn_emit(ptr @.str1732) + %t217 = load ptr, ptr %t207 + call void @fn_emit(ptr %t217) + call void @fn_emit(ptr @.str1733) + %t218 = load ptr, ptr %t204 + %t219 = call ptr @fn_str_concat(ptr @.str1734, ptr %t218) + %t220 = call ptr @fn_emit_bind(ptr %t219) + store ptr %t220, ptr %t221 + %t222 = load ptr, ptr %t221 + %t223 = call ptr @fn_str_concat(ptr @.str1735, ptr %t222) + %t224 = call ptr @fn_str_concat(ptr %t223, ptr @.str1736) + %t225 = load ptr, ptr %t199 + %t226 = call ptr @fn_str_concat(ptr %t224, ptr %t225) + %t227 = call ptr @fn_emit_bind(ptr %t226) + store ptr %t227, ptr %t228 + call void @fn_emit(ptr @.str1737) + %t229 = load ptr, ptr %t228 + call void @fn_emit(ptr %t229) + call void @fn_emit(ptr @.str1738) + %t230 = load ptr, ptr %t209 + call void @fn_emit(ptr %t230) + call void @fn_emit(ptr @.str1739) + %t231 = load ptr, ptr %t215 + call void @fn_emit(ptr %t231) + call void @fn_emit(ptr @.str1740) + %t232 = load ptr, ptr %t209 + call void @fn_emit(ptr %t232) + call void @fn_emit(ptr @.str1741) + %t233 = load ptr, ptr %t42 + %t234 = load ptr, ptr %t38 + %t235 = load ptr, ptr %t221 + %t236 = call ptr @fn_list_elem_addr(ptr %t233, ptr %t234, ptr %t235) + store ptr %t236, ptr %t237 + %t238 = load ptr, ptr %t38 + %t239 = call ptr @fn_str_concat(ptr @.str1742, ptr %t238) + %t240 = call ptr @fn_str_concat(ptr %t239, ptr @.str1743) + %t241 = load ptr, ptr %t237 + %t242 = call ptr @fn_str_concat(ptr %t240, ptr %t241) + %t243 = call ptr @fn_emit_bind(ptr %t242) + store ptr %t243, ptr %t244 + %t245 = load ptr, ptr %t38 + %t246 = call ptr @fn_str_concat(ptr @.str1744, ptr %t245) + %t247 = call ptr @fn_str_concat(ptr %t246, ptr @.str1745) + %t248 = load ptr, ptr %t244 + %t249 = call ptr @fn_str_concat(ptr %t247, ptr %t248) + %t250 = call ptr @fn_str_concat(ptr %t249, ptr @.str1746) + %t251 = load ptr, ptr %t195 + %t252 = getelementptr inbounds %Cmp_Val, ptr %t251, i32 0, i32 0 + %t253 = load ptr, ptr %t252 + %t254 = call ptr @fn_str_concat(ptr %t250, ptr %t253) + %t255 = call ptr @fn_emit_bind(ptr %t254) + store ptr %t255, ptr %t256 + call void @fn_emit(ptr @.str1747) + %t257 = load ptr, ptr %t256 + call void @fn_emit(ptr %t257) + call void @fn_emit(ptr @.str1748) + %t258 = load ptr, ptr %t211 + call void @fn_emit(ptr %t258) + call void @fn_emit(ptr @.str1749) + %t259 = load ptr, ptr %t213 + call void @fn_emit(ptr %t259) + call void @fn_emit(ptr @.str1750) + %t260 = load ptr, ptr %t211 + call void @fn_emit(ptr %t260) + call void @fn_emit(ptr @.str1751) + %t261 = load ptr, ptr %t221 + %t262 = load ptr, ptr %t201 + call void @fn_store_at(ptr @.str1752, ptr %t261, ptr %t262) + call void @fn_emit(ptr @.str1753) + %t263 = load ptr, ptr %t215 + call void @fn_emit(ptr %t263) + call void @fn_emit(ptr @.str1754) + %t264 = load ptr, ptr %t213 + call void @fn_emit(ptr %t264) + call void @fn_emit(ptr @.str1755) + %t265 = load ptr, ptr %t221 + %t266 = call ptr @fn_str_concat(ptr @.str1756, ptr %t265) + %t267 = call ptr @fn_str_concat(ptr %t266, ptr @.str1757) + %t268 = call ptr @fn_emit_bind(ptr %t267) + store ptr %t268, ptr %t269 + %t270 = load ptr, ptr %t269 + %t271 = load ptr, ptr %t204 + call void @fn_store_at(ptr @.str1758, ptr %t270, ptr %t271) + call void @fn_emit(ptr @.str1759) + %t272 = load ptr, ptr %t207 + call void @fn_emit(ptr %t272) + call void @fn_emit(ptr @.str1760) + %t273 = load ptr, ptr %t215 + call void @fn_emit(ptr %t273) + call void @fn_emit(ptr @.str1761) + %t274 = load ptr, ptr %t201 + %t275 = call ptr @fn_str_concat(ptr @.str1762, ptr %t274) + %t276 = call ptr @fn_emit_bind(ptr %t275) + store ptr %t276, ptr %t277 + %t278 = load ptr, ptr %t0 + %t279 = call i32 @fn_str_eq(ptr %t278, ptr @.str1763) + %t280 = icmp ne i32 %t279, 0 + br i1 %t280, label %then29, label %ifend31 +then29: + %t281 = load ptr, ptr %t277 + %t282 = call ptr @fn_val(ptr %t281, ptr @.str1764) + store ptr %t282, ptr %retval + br label %ret +ifend31: + %t283 = load ptr, ptr %t277 + %t284 = call ptr @fn_str_concat(ptr @.str1765, ptr %t283) + %t285 = call ptr @fn_str_concat(ptr %t284, ptr @.str1766) + %t286 = call ptr @fn_emit_bind(ptr %t285) + store ptr %t286, ptr %t287 + %t288 = load ptr, ptr %t287 + %t289 = call ptr @fn_str_concat(ptr @.str1767, ptr %t288) + %t290 = call ptr @fn_str_concat(ptr %t289, ptr @.str1768) + %t291 = call ptr @fn_emit_bind(ptr %t290) + %t292 = call ptr @fn_val(ptr %t291, ptr @.str1769) + store ptr %t292, ptr %retval + br label %ret +ifend28: + %t293 = load ptr, ptr %t0 + %t294 = call i32 @fn_str_eq(ptr %t293, ptr @.str1770) + %t295 = icmp ne i32 %t294, 0 + br i1 %t295, label %then32, label %ifend34 +then32: + %t296 = load ptr, ptr %t1 + %t297 = getelementptr inbounds %Cmp_Node, ptr %t296, i32 0, i32 7 + %t298 = load ptr, ptr %t297 + %t299 = getelementptr inbounds %LSlice, ptr %t298, i32 0, i32 0 + %t300 = load ptr, ptr %t299 + %t301 = getelementptr inbounds ptr, ptr %t300, i32 1 + %t302 = load ptr, ptr %t301 + %t303 = call ptr @fn_emit_expr(ptr %t302) + store ptr %t303, ptr %t304 + %t305 = load ptr, ptr %t1 + %t306 = getelementptr inbounds %Cmp_Node, ptr %t305, i32 0, i32 7 + %t307 = load ptr, ptr %t306 + %t308 = getelementptr inbounds %LSlice, ptr %t307, i32 0, i32 0 + %t309 = load ptr, ptr %t308 + %t310 = getelementptr inbounds ptr, ptr %t309, i32 2 + %t311 = load ptr, ptr %t310 + %t312 = call ptr @fn_emit_expr(ptr %t311) + store ptr %t312, ptr %t313 + %t314 = load ptr, ptr %t42 + %t315 = load ptr, ptr %t38 + call void @fn_list_grow_if_full(ptr %t314, ptr %t315) + %t316 = load ptr, ptr %t45 + %t317 = call ptr @fn_str_concat(ptr @.str1771, ptr %t316) + %t318 = call ptr @fn_emit_bind(ptr %t317) + store ptr %t318, ptr %t319 + %t320 = call ptr @fn_emit_alloca(ptr @.str1772) + store ptr %t320, ptr %t321 + %t322 = load ptr, ptr %t319 + %t323 = load ptr, ptr %t321 + call void @fn_store_at(ptr @.str1773, ptr %t322, ptr %t323) + %t324 = call ptr @fn_lbl(ptr @.str1774) + store ptr %t324, ptr %t325 + %t326 = call ptr @fn_lbl(ptr @.str1775) + store ptr %t326, ptr %t327 + %t328 = call ptr @fn_lbl(ptr @.str1776) + store ptr %t328, ptr %t329 + call void @fn_emit(ptr @.str1777) + %t330 = load ptr, ptr %t325 + call void @fn_emit(ptr %t330) + call void @fn_emit(ptr @.str1778) + %t331 = load ptr, ptr %t325 + call void @fn_emit(ptr %t331) + call void @fn_emit(ptr @.str1779) + %t332 = load ptr, ptr %t321 + %t333 = call ptr @fn_str_concat(ptr @.str1780, ptr %t332) + %t334 = call ptr @fn_emit_bind(ptr %t333) + store ptr %t334, ptr %t335 + %t336 = load ptr, ptr %t335 + %t337 = call ptr @fn_str_concat(ptr @.str1781, ptr %t336) + %t338 = call ptr @fn_str_concat(ptr %t337, ptr @.str1782) + %t339 = load ptr, ptr %t304 + %t340 = getelementptr inbounds %Cmp_Val, ptr %t339, i32 0, i32 0 + %t341 = load ptr, ptr %t340 + %t342 = call ptr @fn_str_concat(ptr %t338, ptr %t341) + %t343 = call ptr @fn_emit_bind(ptr %t342) + store ptr %t343, ptr %t344 + call void @fn_emit(ptr @.str1783) + %t345 = load ptr, ptr %t344 + call void @fn_emit(ptr %t345) + call void @fn_emit(ptr @.str1784) + %t346 = load ptr, ptr %t327 + call void @fn_emit(ptr %t346) + call void @fn_emit(ptr @.str1785) + %t347 = load ptr, ptr %t329 + call void @fn_emit(ptr %t347) + call void @fn_emit(ptr @.str1786) + %t348 = load ptr, ptr %t327 + call void @fn_emit(ptr %t348) + call void @fn_emit(ptr @.str1787) + %t349 = load ptr, ptr %t335 + %t350 = call ptr @fn_str_concat(ptr @.str1788, ptr %t349) + %t351 = call ptr @fn_str_concat(ptr %t350, ptr @.str1789) + %t352 = call ptr @fn_emit_bind(ptr %t351) + store ptr %t352, ptr %t353 + %t354 = load ptr, ptr %t42 + %t355 = load ptr, ptr %t38 + %t356 = load ptr, ptr %t353 + %t357 = call ptr @fn_list_elem_addr(ptr %t354, ptr %t355, ptr %t356) + store ptr %t357, ptr %t358 + %t359 = load ptr, ptr %t38 + %t360 = call ptr @fn_str_concat(ptr @.str1790, ptr %t359) + %t361 = call ptr @fn_str_concat(ptr %t360, ptr @.str1791) + %t362 = load ptr, ptr %t358 + %t363 = call ptr @fn_str_concat(ptr %t361, ptr %t362) + %t364 = call ptr @fn_emit_bind(ptr %t363) + store ptr %t364, ptr %t365 + %t366 = load ptr, ptr %t42 + %t367 = load ptr, ptr %t38 + %t368 = load ptr, ptr %t335 + %t369 = call ptr @fn_list_elem_addr(ptr %t366, ptr %t367, ptr %t368) + store ptr %t369, ptr %t370 + call void @fn_emit(ptr @.str1792) + %t371 = load ptr, ptr %t38 + call void @fn_emit(ptr %t371) + call void @fn_emit(ptr @.str1793) + %t372 = load ptr, ptr %t365 + call void @fn_emit(ptr %t372) + call void @fn_emit(ptr @.str1794) + %t373 = load ptr, ptr %t370 + call void @fn_emit(ptr %t373) + call void @fn_emit(ptr @.str1795) + %t374 = load ptr, ptr %t353 + %t375 = load ptr, ptr %t321 + call void @fn_store_at(ptr @.str1796, ptr %t374, ptr %t375) + call void @fn_emit(ptr @.str1797) + %t376 = load ptr, ptr %t325 + call void @fn_emit(ptr %t376) + call void @fn_emit(ptr @.str1798) + %t377 = load ptr, ptr %t329 + call void @fn_emit(ptr %t377) + call void @fn_emit(ptr @.str1799) + %t378 = load ptr, ptr %t42 + %t379 = load ptr, ptr %t38 + %t380 = load ptr, ptr %t304 + %t381 = getelementptr inbounds %Cmp_Val, ptr %t380, i32 0, i32 0 + %t382 = load ptr, ptr %t381 + %t383 = call ptr @fn_list_elem_addr(ptr %t378, ptr %t379, ptr %t382) + store ptr %t383, ptr %t384 + call void @fn_emit(ptr @.str1800) + %t385 = load ptr, ptr %t38 + call void @fn_emit(ptr %t385) + call void @fn_emit(ptr @.str1801) + %t386 = load ptr, ptr %t313 + %t387 = getelementptr inbounds %Cmp_Val, ptr %t386, i32 0, i32 0 + %t388 = load ptr, ptr %t387 + call void @fn_emit(ptr %t388) + call void @fn_emit(ptr @.str1802) + %t389 = load ptr, ptr %t384 + call void @fn_emit(ptr %t389) + call void @fn_emit(ptr @.str1803) + %t390 = load ptr, ptr %t319 + %t391 = call ptr @fn_str_concat(ptr @.str1804, ptr %t390) + %t392 = call ptr @fn_str_concat(ptr %t391, ptr @.str1805) + %t393 = call ptr @fn_emit_bind(ptr %t392) + store ptr %t393, ptr %t394 + call void @fn_emit(ptr @.str1806) + %t395 = load ptr, ptr %t394 + call void @fn_emit(ptr %t395) + call void @fn_emit(ptr @.str1807) + %t396 = load ptr, ptr %t45 + call void @fn_emit(ptr %t396) + call void @fn_emit(ptr @.str1808) + %t397 = call ptr @fn_val(ptr @.str1809, ptr @.str1810) + store ptr %t397, ptr %retval + br label %ret +ifend34: + %t398 = load ptr, ptr %t0 + %t399 = call i32 @fn_str_eq(ptr %t398, ptr @.str1811) + %t400 = icmp ne i32 %t399, 0 + br i1 %t400, label %then35, label %ifend37 +then35: + %t401 = load ptr, ptr %t1 + %t402 = getelementptr inbounds %Cmp_Node, ptr %t401, i32 0, i32 7 + %t403 = load ptr, ptr %t402 + %t404 = getelementptr inbounds %LSlice, ptr %t403, i32 0, i32 0 + %t405 = load ptr, ptr %t404 + %t406 = getelementptr inbounds ptr, ptr %t405, i32 1 + %t407 = load ptr, ptr %t406 + %t408 = call ptr @fn_emit_expr(ptr %t407) + store ptr %t408, ptr %t409 + %t410 = load ptr, ptr %t45 + %t411 = call ptr @fn_str_concat(ptr @.str1812, ptr %t410) + %t412 = call ptr @fn_emit_bind(ptr %t411) + store ptr %t412, ptr %t413 + %t414 = load ptr, ptr %t413 + %t415 = call ptr @fn_str_concat(ptr @.str1813, ptr %t414) + %t416 = call ptr @fn_str_concat(ptr %t415, ptr @.str1814) + %t417 = call ptr @fn_emit_bind(ptr %t416) + store ptr %t417, ptr %t418 + %t419 = call ptr @fn_emit_alloca(ptr @.str1815) + store ptr %t419, ptr %t420 + %t421 = load ptr, ptr %t409 + %t422 = getelementptr inbounds %Cmp_Val, ptr %t421, i32 0, i32 0 + %t423 = load ptr, ptr %t422 + %t424 = load ptr, ptr %t420 + call void @fn_store_at(ptr @.str1816, ptr %t423, ptr %t424) + %t425 = call ptr @fn_lbl(ptr @.str1817) + store ptr %t425, ptr %t426 + %t427 = call ptr @fn_lbl(ptr @.str1818) + store ptr %t427, ptr %t428 + %t429 = call ptr @fn_lbl(ptr @.str1819) + store ptr %t429, ptr %t430 + call void @fn_emit(ptr @.str1820) + %t431 = load ptr, ptr %t426 + call void @fn_emit(ptr %t431) + call void @fn_emit(ptr @.str1821) + %t432 = load ptr, ptr %t426 + call void @fn_emit(ptr %t432) + call void @fn_emit(ptr @.str1822) + %t433 = load ptr, ptr %t420 + %t434 = call ptr @fn_str_concat(ptr @.str1823, ptr %t433) + %t435 = call ptr @fn_emit_bind(ptr %t434) + store ptr %t435, ptr %t436 + %t437 = load ptr, ptr %t436 + %t438 = call ptr @fn_str_concat(ptr @.str1824, ptr %t437) + %t439 = call ptr @fn_str_concat(ptr %t438, ptr @.str1825) + %t440 = load ptr, ptr %t418 + %t441 = call ptr @fn_str_concat(ptr %t439, ptr %t440) + %t442 = call ptr @fn_emit_bind(ptr %t441) + store ptr %t442, ptr %t443 + call void @fn_emit(ptr @.str1826) + %t444 = load ptr, ptr %t443 + call void @fn_emit(ptr %t444) + call void @fn_emit(ptr @.str1827) + %t445 = load ptr, ptr %t428 + call void @fn_emit(ptr %t445) + call void @fn_emit(ptr @.str1828) + %t446 = load ptr, ptr %t430 + call void @fn_emit(ptr %t446) + call void @fn_emit(ptr @.str1829) + %t447 = load ptr, ptr %t428 + call void @fn_emit(ptr %t447) + call void @fn_emit(ptr @.str1830) + %t448 = load ptr, ptr %t436 + %t449 = call ptr @fn_str_concat(ptr @.str1831, ptr %t448) + %t450 = call ptr @fn_str_concat(ptr %t449, ptr @.str1832) + %t451 = call ptr @fn_emit_bind(ptr %t450) + store ptr %t451, ptr %t452 + %t453 = load ptr, ptr %t42 + %t454 = load ptr, ptr %t38 + %t455 = load ptr, ptr %t452 + %t456 = call ptr @fn_list_elem_addr(ptr %t453, ptr %t454, ptr %t455) + store ptr %t456, ptr %t457 + %t458 = load ptr, ptr %t38 + %t459 = call ptr @fn_str_concat(ptr @.str1833, ptr %t458) + %t460 = call ptr @fn_str_concat(ptr %t459, ptr @.str1834) + %t461 = load ptr, ptr %t457 + %t462 = call ptr @fn_str_concat(ptr %t460, ptr %t461) + %t463 = call ptr @fn_emit_bind(ptr %t462) + store ptr %t463, ptr %t464 + %t465 = load ptr, ptr %t42 + %t466 = load ptr, ptr %t38 + %t467 = load ptr, ptr %t436 + %t468 = call ptr @fn_list_elem_addr(ptr %t465, ptr %t466, ptr %t467) + store ptr %t468, ptr %t469 + call void @fn_emit(ptr @.str1835) + %t470 = load ptr, ptr %t38 + call void @fn_emit(ptr %t470) + call void @fn_emit(ptr @.str1836) + %t471 = load ptr, ptr %t464 + call void @fn_emit(ptr %t471) + call void @fn_emit(ptr @.str1837) + %t472 = load ptr, ptr %t469 + call void @fn_emit(ptr %t472) + call void @fn_emit(ptr @.str1838) + %t473 = load ptr, ptr %t452 + %t474 = load ptr, ptr %t420 + call void @fn_store_at(ptr @.str1839, ptr %t473, ptr %t474) + call void @fn_emit(ptr @.str1840) + %t475 = load ptr, ptr %t426 + call void @fn_emit(ptr %t475) + call void @fn_emit(ptr @.str1841) + %t476 = load ptr, ptr %t430 + call void @fn_emit(ptr %t476) + call void @fn_emit(ptr @.str1842) + call void @fn_emit(ptr @.str1843) + %t477 = load ptr, ptr %t418 + call void @fn_emit(ptr %t477) + call void @fn_emit(ptr @.str1844) + %t478 = load ptr, ptr %t45 + call void @fn_emit(ptr %t478) + call void @fn_emit(ptr @.str1845) + %t479 = call ptr @fn_val(ptr @.str1846, ptr @.str1847) + store ptr %t479, ptr %retval + br label %ret +ifend37: + %t480 = load ptr, ptr %t0 + %t481 = call i32 @fn_str_eq(ptr %t480, ptr @.str1848) + %t482 = icmp ne i32 %t481, 0 + br i1 %t482, label %then38, label %ifend40 +then38: + %t483 = load ptr, ptr %t1 + %t484 = getelementptr inbounds %Cmp_Node, ptr %t483, i32 0, i32 7 + %t485 = load ptr, ptr %t484 + %t486 = getelementptr inbounds %LSlice, ptr %t485, i32 0, i32 0 + %t487 = load ptr, ptr %t486 + %t488 = getelementptr inbounds ptr, ptr %t487, i32 1 + %t489 = load ptr, ptr %t488 + %t490 = call ptr @fn_emit_expr(ptr %t489) + store ptr %t490, ptr %t491 + %t492 = load ptr, ptr %t45 + %t493 = call ptr @fn_str_concat(ptr @.str1849, ptr %t492) + %t494 = call ptr @fn_emit_bind(ptr %t493) + store ptr %t494, ptr %t495 + %t496 = call ptr @fn_emit_alloca(ptr @.str1850) + store ptr %t496, ptr %t497 + %t498 = load ptr, ptr %t497 + call void @fn_store_at(ptr @.str1851, ptr @.str1852, ptr %t498) + %t499 = call ptr @fn_emit_alloca(ptr @.str1853) + store ptr %t499, ptr %t500 + %t501 = load ptr, ptr %t500 + call void @fn_store_at(ptr @.str1854, ptr @.str1855, ptr %t501) + %t502 = call ptr @fn_lbl(ptr @.str1856) + store ptr %t502, ptr %t503 + %t504 = call ptr @fn_lbl(ptr @.str1857) + store ptr %t504, ptr %t505 + %t506 = call ptr @fn_lbl(ptr @.str1858) + store ptr %t506, ptr %t507 + %t508 = call ptr @fn_lbl(ptr @.str1859) + store ptr %t508, ptr %t509 + %t510 = call ptr @fn_lbl(ptr @.str1860) + store ptr %t510, ptr %t511 + call void @fn_emit(ptr @.str1861) + %t512 = load ptr, ptr %t503 + call void @fn_emit(ptr %t512) + call void @fn_emit(ptr @.str1862) + %t513 = load ptr, ptr %t503 + call void @fn_emit(ptr %t513) + call void @fn_emit(ptr @.str1863) + %t514 = load ptr, ptr %t500 + %t515 = call ptr @fn_str_concat(ptr @.str1864, ptr %t514) + %t516 = call ptr @fn_emit_bind(ptr %t515) + store ptr %t516, ptr %t517 + %t518 = load ptr, ptr %t517 + %t519 = call ptr @fn_str_concat(ptr @.str1865, ptr %t518) + %t520 = call ptr @fn_str_concat(ptr %t519, ptr @.str1866) + %t521 = load ptr, ptr %t495 + %t522 = call ptr @fn_str_concat(ptr %t520, ptr %t521) + %t523 = call ptr @fn_emit_bind(ptr %t522) + store ptr %t523, ptr %t524 + %t525 = load ptr, ptr %t497 + %t526 = call ptr @fn_str_concat(ptr @.str1867, ptr %t525) + %t527 = call ptr @fn_emit_bind(ptr %t526) + store ptr %t527, ptr %t528 + %t529 = load ptr, ptr %t528 + %t530 = call ptr @fn_str_concat(ptr @.str1868, ptr %t529) + %t531 = call ptr @fn_str_concat(ptr %t530, ptr @.str1869) + %t532 = call ptr @fn_emit_bind(ptr %t531) + store ptr %t532, ptr %t533 + %t534 = load ptr, ptr %t524 + %t535 = call ptr @fn_str_concat(ptr @.str1870, ptr %t534) + %t536 = call ptr @fn_str_concat(ptr %t535, ptr @.str1871) + %t537 = load ptr, ptr %t533 + %t538 = call ptr @fn_str_concat(ptr %t536, ptr %t537) + %t539 = call ptr @fn_emit_bind(ptr %t538) + store ptr %t539, ptr %t540 + call void @fn_emit(ptr @.str1872) + %t541 = load ptr, ptr %t540 + call void @fn_emit(ptr %t541) + call void @fn_emit(ptr @.str1873) + %t542 = load ptr, ptr %t505 + call void @fn_emit(ptr %t542) + call void @fn_emit(ptr @.str1874) + %t543 = load ptr, ptr %t511 + call void @fn_emit(ptr %t543) + call void @fn_emit(ptr @.str1875) + %t544 = load ptr, ptr %t505 + call void @fn_emit(ptr %t544) + call void @fn_emit(ptr @.str1876) + %t545 = load ptr, ptr %t42 + %t546 = load ptr, ptr %t38 + %t547 = load ptr, ptr %t517 + %t548 = call ptr @fn_list_elem_addr(ptr %t545, ptr %t546, ptr %t547) + store ptr %t548, ptr %t549 + %t550 = load ptr, ptr %t38 + %t551 = call ptr @fn_str_concat(ptr @.str1877, ptr %t550) + %t552 = call ptr @fn_str_concat(ptr %t551, ptr @.str1878) + %t553 = load ptr, ptr %t549 + %t554 = call ptr @fn_str_concat(ptr %t552, ptr %t553) + %t555 = call ptr @fn_emit_bind(ptr %t554) + store ptr %t555, ptr %t556 + %t557 = load ptr, ptr %t38 + %t558 = call ptr @fn_str_concat(ptr @.str1879, ptr %t557) + %t559 = call ptr @fn_str_concat(ptr %t558, ptr @.str1880) + %t560 = load ptr, ptr %t556 + %t561 = call ptr @fn_str_concat(ptr %t559, ptr %t560) + %t562 = call ptr @fn_str_concat(ptr %t561, ptr @.str1881) + %t563 = load ptr, ptr %t491 + %t564 = getelementptr inbounds %Cmp_Val, ptr %t563, i32 0, i32 0 + %t565 = load ptr, ptr %t564 + %t566 = call ptr @fn_str_concat(ptr %t562, ptr %t565) + %t567 = call ptr @fn_emit_bind(ptr %t566) + store ptr %t567, ptr %t568 + call void @fn_emit(ptr @.str1882) + %t569 = load ptr, ptr %t568 + call void @fn_emit(ptr %t569) + call void @fn_emit(ptr @.str1883) + %t570 = load ptr, ptr %t507 + call void @fn_emit(ptr %t570) + call void @fn_emit(ptr @.str1884) + %t571 = load ptr, ptr %t509 + call void @fn_emit(ptr %t571) + call void @fn_emit(ptr @.str1885) + %t572 = load ptr, ptr %t507 + call void @fn_emit(ptr %t572) + call void @fn_emit(ptr @.str1886) + %t573 = load ptr, ptr %t517 + %t574 = load ptr, ptr %t497 + call void @fn_store_at(ptr @.str1887, ptr %t573, ptr %t574) + call void @fn_emit(ptr @.str1888) + %t575 = load ptr, ptr %t503 + call void @fn_emit(ptr %t575) + call void @fn_emit(ptr @.str1889) + %t576 = load ptr, ptr %t509 + call void @fn_emit(ptr %t576) + call void @fn_emit(ptr @.str1890) + %t577 = load ptr, ptr %t517 + %t578 = call ptr @fn_str_concat(ptr @.str1891, ptr %t577) + %t579 = call ptr @fn_str_concat(ptr %t578, ptr @.str1892) + %t580 = call ptr @fn_emit_bind(ptr %t579) + store ptr %t580, ptr %t581 + %t582 = load ptr, ptr %t581 + %t583 = load ptr, ptr %t500 + call void @fn_store_at(ptr @.str1893, ptr %t582, ptr %t583) + call void @fn_emit(ptr @.str1894) + %t584 = load ptr, ptr %t503 + call void @fn_emit(ptr %t584) + call void @fn_emit(ptr @.str1895) + %t585 = load ptr, ptr %t511 + call void @fn_emit(ptr %t585) + call void @fn_emit(ptr @.str1896) + %t586 = load ptr, ptr %t497 + %t587 = call ptr @fn_str_concat(ptr @.str1897, ptr %t586) + %t588 = call ptr @fn_emit_bind(ptr %t587) + store ptr %t588, ptr %t589 + %t590 = load ptr, ptr %t589 + %t591 = call ptr @fn_str_concat(ptr @.str1898, ptr %t590) + %t592 = call ptr @fn_str_concat(ptr %t591, ptr @.str1899) + %t593 = call ptr @fn_emit_bind(ptr %t592) + store ptr %t593, ptr %t594 + %t595 = call ptr @fn_lbl(ptr @.str1900) + store ptr %t595, ptr %t596 + %t597 = call ptr @fn_lbl(ptr @.str1901) + store ptr %t597, ptr %t598 + call void @fn_emit(ptr @.str1902) + %t599 = load ptr, ptr %t594 + call void @fn_emit(ptr %t599) + call void @fn_emit(ptr @.str1903) + %t600 = load ptr, ptr %t596 + call void @fn_emit(ptr %t600) + call void @fn_emit(ptr @.str1904) + %t601 = load ptr, ptr %t598 + call void @fn_emit(ptr %t601) + call void @fn_emit(ptr @.str1905) + %t602 = load ptr, ptr %t596 + call void @fn_emit(ptr %t602) + call void @fn_emit(ptr @.str1906) + %t603 = load ptr, ptr %t495 + %t604 = call ptr @fn_str_concat(ptr @.str1907, ptr %t603) + %t605 = call ptr @fn_str_concat(ptr %t604, ptr @.str1908) + %t606 = call ptr @fn_emit_bind(ptr %t605) + store ptr %t606, ptr %t607 + %t608 = call ptr @fn_emit_alloca(ptr @.str1909) + store ptr %t608, ptr %t609 + %t610 = load ptr, ptr %t589 + %t611 = load ptr, ptr %t609 + call void @fn_store_at(ptr @.str1910, ptr %t610, ptr %t611) + %t612 = call ptr @fn_lbl(ptr @.str1911) + store ptr %t612, ptr %t613 + %t614 = call ptr @fn_lbl(ptr @.str1912) + store ptr %t614, ptr %t615 + %t616 = call ptr @fn_lbl(ptr @.str1913) + store ptr %t616, ptr %t617 + call void @fn_emit(ptr @.str1914) + %t618 = load ptr, ptr %t613 + call void @fn_emit(ptr %t618) + call void @fn_emit(ptr @.str1915) + %t619 = load ptr, ptr %t613 + call void @fn_emit(ptr %t619) + call void @fn_emit(ptr @.str1916) + %t620 = load ptr, ptr %t609 + %t621 = call ptr @fn_str_concat(ptr @.str1917, ptr %t620) + %t622 = call ptr @fn_emit_bind(ptr %t621) + store ptr %t622, ptr %t623 + %t624 = load ptr, ptr %t623 + %t625 = call ptr @fn_str_concat(ptr @.str1918, ptr %t624) + %t626 = call ptr @fn_str_concat(ptr %t625, ptr @.str1919) + %t627 = load ptr, ptr %t607 + %t628 = call ptr @fn_str_concat(ptr %t626, ptr %t627) + %t629 = call ptr @fn_emit_bind(ptr %t628) + store ptr %t629, ptr %t630 + call void @fn_emit(ptr @.str1920) + %t631 = load ptr, ptr %t630 + call void @fn_emit(ptr %t631) + call void @fn_emit(ptr @.str1921) + %t632 = load ptr, ptr %t615 + call void @fn_emit(ptr %t632) + call void @fn_emit(ptr @.str1922) + %t633 = load ptr, ptr %t617 + call void @fn_emit(ptr %t633) + call void @fn_emit(ptr @.str1923) + %t634 = load ptr, ptr %t615 + call void @fn_emit(ptr %t634) + call void @fn_emit(ptr @.str1924) + %t635 = load ptr, ptr %t623 + %t636 = call ptr @fn_str_concat(ptr @.str1925, ptr %t635) + %t637 = call ptr @fn_str_concat(ptr %t636, ptr @.str1926) + %t638 = call ptr @fn_emit_bind(ptr %t637) + store ptr %t638, ptr %t639 + %t640 = load ptr, ptr %t42 + %t641 = load ptr, ptr %t38 + %t642 = load ptr, ptr %t639 + %t643 = call ptr @fn_list_elem_addr(ptr %t640, ptr %t641, ptr %t642) + store ptr %t643, ptr %t644 + %t645 = load ptr, ptr %t38 + %t646 = call ptr @fn_str_concat(ptr @.str1927, ptr %t645) + %t647 = call ptr @fn_str_concat(ptr %t646, ptr @.str1928) + %t648 = load ptr, ptr %t644 + %t649 = call ptr @fn_str_concat(ptr %t647, ptr %t648) + %t650 = call ptr @fn_emit_bind(ptr %t649) + store ptr %t650, ptr %t651 + %t652 = load ptr, ptr %t42 + %t653 = load ptr, ptr %t38 + %t654 = load ptr, ptr %t623 + %t655 = call ptr @fn_list_elem_addr(ptr %t652, ptr %t653, ptr %t654) + store ptr %t655, ptr %t656 + call void @fn_emit(ptr @.str1929) + %t657 = load ptr, ptr %t38 + call void @fn_emit(ptr %t657) + call void @fn_emit(ptr @.str1930) + %t658 = load ptr, ptr %t651 + call void @fn_emit(ptr %t658) + call void @fn_emit(ptr @.str1931) + %t659 = load ptr, ptr %t656 + call void @fn_emit(ptr %t659) + call void @fn_emit(ptr @.str1932) + %t660 = load ptr, ptr %t639 + %t661 = load ptr, ptr %t609 + call void @fn_store_at(ptr @.str1933, ptr %t660, ptr %t661) + call void @fn_emit(ptr @.str1934) + %t662 = load ptr, ptr %t613 + call void @fn_emit(ptr %t662) + call void @fn_emit(ptr @.str1935) + %t663 = load ptr, ptr %t617 + call void @fn_emit(ptr %t663) + call void @fn_emit(ptr @.str1936) + call void @fn_emit(ptr @.str1937) + %t664 = load ptr, ptr %t607 + call void @fn_emit(ptr %t664) + call void @fn_emit(ptr @.str1938) + %t665 = load ptr, ptr %t45 + call void @fn_emit(ptr %t665) + call void @fn_emit(ptr @.str1939) + call void @fn_emit(ptr @.str1940) + %t666 = load ptr, ptr %t598 + call void @fn_emit(ptr %t666) + call void @fn_emit(ptr @.str1941) + %t667 = load ptr, ptr %t598 + call void @fn_emit(ptr %t667) + call void @fn_emit(ptr @.str1942) + %t668 = call ptr @fn_val(ptr @.str1943, ptr @.str1944) + store ptr %t668, ptr %retval + br label %ret +ifend40: + %t669 = load ptr, ptr %t0 + %t670 = call i32 @fn_str_eq(ptr %t669, ptr @.str1945) + %t671 = icmp ne i32 %t670, 0 + br i1 %t671, label %then41, label %ifend43 +then41: + %t672 = load ptr, ptr %t45 + %t673 = call ptr @fn_str_concat(ptr @.str1946, ptr %t672) + %t674 = call ptr @fn_emit_bind(ptr %t673) + store ptr %t674, ptr %t675 + %t676 = call ptr @fn_emit_alloca(ptr @.str1947) + store ptr %t676, ptr %t677 + %t678 = load ptr, ptr %t677 + call void @fn_store_at(ptr @.str1948, ptr @.str1949, ptr %t678) + %t679 = call ptr @fn_lbl(ptr @.str1950) + store ptr %t679, ptr %t680 + %t681 = call ptr @fn_lbl(ptr @.str1951) + store ptr %t681, ptr %t682 + %t683 = call ptr @fn_lbl(ptr @.str1952) + store ptr %t683, ptr %t684 + call void @fn_emit(ptr @.str1953) + %t685 = load ptr, ptr %t680 + call void @fn_emit(ptr %t685) + call void @fn_emit(ptr @.str1954) + %t686 = load ptr, ptr %t680 + call void @fn_emit(ptr %t686) + call void @fn_emit(ptr @.str1955) + %t687 = load ptr, ptr %t677 + %t688 = call ptr @fn_str_concat(ptr @.str1956, ptr %t687) + %t689 = call ptr @fn_emit_bind(ptr %t688) + store ptr %t689, ptr %t690 + %t691 = load ptr, ptr %t690 + %t692 = call ptr @fn_str_concat(ptr @.str1957, ptr %t691) + %t693 = call ptr @fn_str_concat(ptr %t692, ptr @.str1958) + %t694 = load ptr, ptr %t675 + %t695 = call ptr @fn_str_concat(ptr %t693, ptr %t694) + %t696 = call ptr @fn_emit_bind(ptr %t695) + store ptr %t696, ptr %t697 + call void @fn_emit(ptr @.str1959) + %t698 = load ptr, ptr %t697 + call void @fn_emit(ptr %t698) + call void @fn_emit(ptr @.str1960) + %t699 = load ptr, ptr %t682 + call void @fn_emit(ptr %t699) + call void @fn_emit(ptr @.str1961) + %t700 = load ptr, ptr %t684 + call void @fn_emit(ptr %t700) + call void @fn_emit(ptr @.str1962) + %t701 = load ptr, ptr %t682 + call void @fn_emit(ptr %t701) + call void @fn_emit(ptr @.str1963) + %t702 = load ptr, ptr %t42 + %t703 = load ptr, ptr %t38 + %t704 = load ptr, ptr %t690 + %t705 = call ptr @fn_list_elem_addr(ptr %t702, ptr %t703, ptr %t704) + store ptr %t705, ptr %t706 + %t707 = load ptr, ptr %t38 + %t708 = call ptr @fn_str_concat(ptr @.str1964, ptr %t707) + %t709 = call ptr @fn_str_concat(ptr %t708, ptr @.str1965) + %t710 = load ptr, ptr %t706 + %t711 = call ptr @fn_str_concat(ptr %t709, ptr %t710) + %t712 = call ptr @fn_emit_bind(ptr %t711) + store ptr %t712, ptr %t713 + %t714 = call ptr @fn_emit_alloca(ptr @.str1966) + store ptr %t714, ptr %t715 + %t716 = load ptr, ptr %t690 + %t717 = call ptr @fn_str_concat(ptr @.str1967, ptr %t716) + %t718 = call ptr @fn_str_concat(ptr %t717, ptr @.str1968) + %t719 = call ptr @fn_emit_bind(ptr %t718) + store ptr %t719, ptr %t720 + %t721 = load ptr, ptr %t720 + %t722 = load ptr, ptr %t715 + call void @fn_store_at(ptr @.str1969, ptr %t721, ptr %t722) + %t723 = call ptr @fn_lbl(ptr @.str1970) + store ptr %t723, ptr %t724 + %t725 = call ptr @fn_lbl(ptr @.str1971) + store ptr %t725, ptr %t726 + %t727 = call ptr @fn_lbl(ptr @.str1972) + store ptr %t727, ptr %t728 + call void @fn_emit(ptr @.str1973) + %t729 = load ptr, ptr %t724 + call void @fn_emit(ptr %t729) + call void @fn_emit(ptr @.str1974) + %t730 = load ptr, ptr %t724 + call void @fn_emit(ptr %t730) + call void @fn_emit(ptr @.str1975) + %t731 = load ptr, ptr %t715 + %t732 = call ptr @fn_str_concat(ptr @.str1976, ptr %t731) + %t733 = call ptr @fn_emit_bind(ptr %t732) + store ptr %t733, ptr %t734 + %t735 = load ptr, ptr %t734 + %t736 = call ptr @fn_str_concat(ptr @.str1977, ptr %t735) + %t737 = call ptr @fn_str_concat(ptr %t736, ptr @.str1978) + %t738 = call ptr @fn_emit_bind(ptr %t737) + store ptr %t738, ptr %t739 + %t740 = load ptr, ptr %t42 + %t741 = load ptr, ptr %t38 + %t742 = load ptr, ptr %t734 + %t743 = call ptr @fn_list_elem_addr(ptr %t740, ptr %t741, ptr %t742) + store ptr %t743, ptr %t744 + %t745 = load ptr, ptr %t38 + %t746 = call ptr @fn_str_concat(ptr @.str1979, ptr %t745) + %t747 = call ptr @fn_str_concat(ptr %t746, ptr @.str1980) + %t748 = load ptr, ptr %t744 + %t749 = call ptr @fn_str_concat(ptr %t747, ptr %t748) + %t750 = call ptr @fn_emit_bind(ptr %t749) + store ptr %t750, ptr %t751 + %t752 = load ptr, ptr %t38 + %t753 = call ptr @fn_str_concat(ptr @.str1981, ptr %t752) + %t754 = call ptr @fn_str_concat(ptr %t753, ptr @.str1982) + %t755 = load ptr, ptr %t751 + %t756 = call ptr @fn_str_concat(ptr %t754, ptr %t755) + %t757 = call ptr @fn_str_concat(ptr %t756, ptr @.str1983) + %t758 = load ptr, ptr %t713 + %t759 = call ptr @fn_str_concat(ptr %t757, ptr %t758) + %t760 = call ptr @fn_emit_bind(ptr %t759) + store ptr %t760, ptr %t761 + %t762 = load ptr, ptr %t739 + %t763 = call ptr @fn_str_concat(ptr @.str1984, ptr %t762) + %t764 = call ptr @fn_str_concat(ptr %t763, ptr @.str1985) + %t765 = load ptr, ptr %t761 + %t766 = call ptr @fn_str_concat(ptr %t764, ptr %t765) + %t767 = call ptr @fn_emit_bind(ptr %t766) + store ptr %t767, ptr %t768 + call void @fn_emit(ptr @.str1986) + %t769 = load ptr, ptr %t768 + call void @fn_emit(ptr %t769) + call void @fn_emit(ptr @.str1987) + %t770 = load ptr, ptr %t726 + call void @fn_emit(ptr %t770) + call void @fn_emit(ptr @.str1988) + %t771 = load ptr, ptr %t728 + call void @fn_emit(ptr %t771) + call void @fn_emit(ptr @.str1989) + %t772 = load ptr, ptr %t726 + call void @fn_emit(ptr %t772) + call void @fn_emit(ptr @.str1990) + %t773 = load ptr, ptr %t734 + %t774 = call ptr @fn_str_concat(ptr @.str1991, ptr %t773) + %t775 = call ptr @fn_str_concat(ptr %t774, ptr @.str1992) + %t776 = call ptr @fn_emit_bind(ptr %t775) + store ptr %t776, ptr %t777 + %t778 = load ptr, ptr %t42 + %t779 = load ptr, ptr %t38 + %t780 = load ptr, ptr %t777 + %t781 = call ptr @fn_list_elem_addr(ptr %t778, ptr %t779, ptr %t780) + store ptr %t781, ptr %t782 + call void @fn_emit(ptr @.str1993) + %t783 = load ptr, ptr %t38 + call void @fn_emit(ptr %t783) + call void @fn_emit(ptr @.str1994) + %t784 = load ptr, ptr %t751 + call void @fn_emit(ptr %t784) + call void @fn_emit(ptr @.str1995) + %t785 = load ptr, ptr %t782 + call void @fn_emit(ptr %t785) + call void @fn_emit(ptr @.str1996) + %t786 = load ptr, ptr %t734 + %t787 = call ptr @fn_str_concat(ptr @.str1997, ptr %t786) + %t788 = call ptr @fn_str_concat(ptr %t787, ptr @.str1998) + %t789 = call ptr @fn_emit_bind(ptr %t788) + store ptr %t789, ptr %t790 + %t791 = load ptr, ptr %t790 + %t792 = load ptr, ptr %t715 + call void @fn_store_at(ptr @.str1999, ptr %t791, ptr %t792) + call void @fn_emit(ptr @.str2000) + %t793 = load ptr, ptr %t724 + call void @fn_emit(ptr %t793) + call void @fn_emit(ptr @.str2001) + %t794 = load ptr, ptr %t728 + call void @fn_emit(ptr %t794) + call void @fn_emit(ptr @.str2002) + %t795 = load ptr, ptr %t715 + %t796 = call ptr @fn_str_concat(ptr @.str2003, ptr %t795) + %t797 = call ptr @fn_emit_bind(ptr %t796) + store ptr %t797, ptr %t798 + %t799 = load ptr, ptr %t798 + %t800 = call ptr @fn_str_concat(ptr @.str2004, ptr %t799) + %t801 = call ptr @fn_str_concat(ptr %t800, ptr @.str2005) + %t802 = call ptr @fn_emit_bind(ptr %t801) + store ptr %t802, ptr %t803 + %t804 = load ptr, ptr %t42 + %t805 = load ptr, ptr %t38 + %t806 = load ptr, ptr %t803 + %t807 = call ptr @fn_list_elem_addr(ptr %t804, ptr %t805, ptr %t806) + store ptr %t807, ptr %t808 + call void @fn_emit(ptr @.str2006) + %t809 = load ptr, ptr %t38 + call void @fn_emit(ptr %t809) + call void @fn_emit(ptr @.str2007) + %t810 = load ptr, ptr %t713 + call void @fn_emit(ptr %t810) + call void @fn_emit(ptr @.str2008) + %t811 = load ptr, ptr %t808 + call void @fn_emit(ptr %t811) + call void @fn_emit(ptr @.str2009) + %t812 = load ptr, ptr %t690 + %t813 = call ptr @fn_str_concat(ptr @.str2010, ptr %t812) + %t814 = call ptr @fn_str_concat(ptr %t813, ptr @.str2011) + %t815 = call ptr @fn_emit_bind(ptr %t814) + store ptr %t815, ptr %t816 + %t817 = load ptr, ptr %t816 + %t818 = load ptr, ptr %t677 + call void @fn_store_at(ptr @.str2012, ptr %t817, ptr %t818) + call void @fn_emit(ptr @.str2013) + %t819 = load ptr, ptr %t680 + call void @fn_emit(ptr %t819) + call void @fn_emit(ptr @.str2014) + %t820 = load ptr, ptr %t684 + call void @fn_emit(ptr %t820) + call void @fn_emit(ptr @.str2015) + %t821 = call ptr @fn_val(ptr @.str2016, ptr @.str2017) + store ptr %t821, ptr %retval + br label %ret +ifend43: + %t822 = load ptr, ptr %t45 + %t823 = call ptr @fn_str_concat(ptr @.str2018, ptr %t822) + %t824 = call ptr @fn_emit_bind(ptr %t823) + store ptr %t824, ptr %t825 + %t826 = call ptr @fn_emit_alloca(ptr @.str2019) + store ptr %t826, ptr %t827 + %t828 = load ptr, ptr %t827 + call void @fn_store_at(ptr @.str2020, ptr @.str2021, ptr %t828) + %t829 = call ptr @fn_emit_alloca(ptr @.str2022) + store ptr %t829, ptr %t830 + %t831 = load ptr, ptr %t825 + %t832 = call ptr @fn_str_concat(ptr @.str2023, ptr %t831) + %t833 = call ptr @fn_str_concat(ptr %t832, ptr @.str2024) + %t834 = call ptr @fn_emit_bind(ptr %t833) + store ptr %t834, ptr %t835 + %t836 = load ptr, ptr %t835 + %t837 = load ptr, ptr %t830 + call void @fn_store_at(ptr @.str2025, ptr %t836, ptr %t837) + %t838 = call ptr @fn_lbl(ptr @.str2026) + store ptr %t838, ptr %t839 + %t840 = call ptr @fn_lbl(ptr @.str2027) + store ptr %t840, ptr %t841 + %t842 = call ptr @fn_lbl(ptr @.str2028) + store ptr %t842, ptr %t843 + call void @fn_emit(ptr @.str2029) + %t844 = load ptr, ptr %t839 + call void @fn_emit(ptr %t844) + call void @fn_emit(ptr @.str2030) + %t845 = load ptr, ptr %t839 + call void @fn_emit(ptr %t845) + call void @fn_emit(ptr @.str2031) + %t846 = load ptr, ptr %t827 + %t847 = call ptr @fn_str_concat(ptr @.str2032, ptr %t846) + %t848 = call ptr @fn_emit_bind(ptr %t847) + store ptr %t848, ptr %t849 + %t850 = load ptr, ptr %t830 + %t851 = call ptr @fn_str_concat(ptr @.str2033, ptr %t850) + %t852 = call ptr @fn_emit_bind(ptr %t851) + store ptr %t852, ptr %t853 + %t854 = load ptr, ptr %t849 + %t855 = call ptr @fn_str_concat(ptr @.str2034, ptr %t854) + %t856 = call ptr @fn_str_concat(ptr %t855, ptr @.str2035) + %t857 = load ptr, ptr %t853 + %t858 = call ptr @fn_str_concat(ptr %t856, ptr %t857) + %t859 = call ptr @fn_emit_bind(ptr %t858) + store ptr %t859, ptr %t860 + call void @fn_emit(ptr @.str2036) + %t861 = load ptr, ptr %t860 + call void @fn_emit(ptr %t861) + call void @fn_emit(ptr @.str2037) + %t862 = load ptr, ptr %t841 + call void @fn_emit(ptr %t862) + call void @fn_emit(ptr @.str2038) + %t863 = load ptr, ptr %t843 + call void @fn_emit(ptr %t863) + call void @fn_emit(ptr @.str2039) + %t864 = load ptr, ptr %t841 + call void @fn_emit(ptr %t864) + call void @fn_emit(ptr @.str2040) + %t865 = load ptr, ptr %t42 + %t866 = load ptr, ptr %t38 + %t867 = load ptr, ptr %t849 + %t868 = call ptr @fn_list_elem_addr(ptr %t865, ptr %t866, ptr %t867) + store ptr %t868, ptr %t869 + %t870 = load ptr, ptr %t42 + %t871 = load ptr, ptr %t38 + %t872 = load ptr, ptr %t853 + %t873 = call ptr @fn_list_elem_addr(ptr %t870, ptr %t871, ptr %t872) + store ptr %t873, ptr %t874 + %t875 = load ptr, ptr %t38 + %t876 = call ptr @fn_str_concat(ptr @.str2041, ptr %t875) + %t877 = call ptr @fn_str_concat(ptr %t876, ptr @.str2042) + %t878 = load ptr, ptr %t869 + %t879 = call ptr @fn_str_concat(ptr %t877, ptr %t878) + %t880 = call ptr @fn_emit_bind(ptr %t879) + store ptr %t880, ptr %t881 + %t882 = load ptr, ptr %t38 + %t883 = call ptr @fn_str_concat(ptr @.str2043, ptr %t882) + %t884 = call ptr @fn_str_concat(ptr %t883, ptr @.str2044) + %t885 = load ptr, ptr %t874 + %t886 = call ptr @fn_str_concat(ptr %t884, ptr %t885) + %t887 = call ptr @fn_emit_bind(ptr %t886) + store ptr %t887, ptr %t888 + call void @fn_emit(ptr @.str2045) + %t889 = load ptr, ptr %t38 + call void @fn_emit(ptr %t889) + call void @fn_emit(ptr @.str2046) + %t890 = load ptr, ptr %t888 + call void @fn_emit(ptr %t890) + call void @fn_emit(ptr @.str2047) + %t891 = load ptr, ptr %t869 + call void @fn_emit(ptr %t891) + call void @fn_emit(ptr @.str2048) + call void @fn_emit(ptr @.str2049) + %t892 = load ptr, ptr %t38 + call void @fn_emit(ptr %t892) + call void @fn_emit(ptr @.str2050) + %t893 = load ptr, ptr %t881 + call void @fn_emit(ptr %t893) + call void @fn_emit(ptr @.str2051) + %t894 = load ptr, ptr %t874 + call void @fn_emit(ptr %t894) + call void @fn_emit(ptr @.str2052) + %t895 = load ptr, ptr %t849 + %t896 = call ptr @fn_str_concat(ptr @.str2053, ptr %t895) + %t897 = call ptr @fn_str_concat(ptr %t896, ptr @.str2054) + %t898 = call ptr @fn_emit_bind(ptr %t897) + store ptr %t898, ptr %t899 + %t900 = load ptr, ptr %t899 + %t901 = load ptr, ptr %t827 + call void @fn_store_at(ptr @.str2055, ptr %t900, ptr %t901) + %t902 = load ptr, ptr %t853 + %t903 = call ptr @fn_str_concat(ptr @.str2056, ptr %t902) + %t904 = call ptr @fn_str_concat(ptr %t903, ptr @.str2057) + %t905 = call ptr @fn_emit_bind(ptr %t904) + store ptr %t905, ptr %t906 + %t907 = load ptr, ptr %t906 + %t908 = load ptr, ptr %t830 + call void @fn_store_at(ptr @.str2058, ptr %t907, ptr %t908) + call void @fn_emit(ptr @.str2059) + %t909 = load ptr, ptr %t839 + call void @fn_emit(ptr %t909) + call void @fn_emit(ptr @.str2060) + %t910 = load ptr, ptr %t843 + call void @fn_emit(ptr %t910) + call void @fn_emit(ptr @.str2061) + %t911 = call ptr @fn_val(ptr @.str2062, ptr @.str2063) + store ptr %t911, ptr %retval + br label %ret +ret: + %t912 = load ptr, ptr %retval + ret ptr %t912 +} + +define i32 @fn_is_ease_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t20 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2064) + %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_str_eq(ptr %t7, ptr @.str2065) + %t9 = icmp ne i32 %t8, 0 + %t10 = zext i1 %t9 to i32 + store i32 %t10, ptr %t2 + br label %scend1 +scend1: + %t11 = load i32, ptr %t2 + %t12 = icmp ne i32 %t11, 0 + %t13 = zext i1 %t12 to i32 + store i32 %t13, ptr %t1 + br i1 %t12, label %scend3, label %sc2 +sc2: + %t14 = load ptr, ptr %t0 + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str2066) + %t16 = icmp ne i32 %t15, 0 + %t17 = zext i1 %t16 to i32 + store i32 %t17, ptr %t1 + br label %scend3 +scend3: + %t18 = load i32, ptr %t1 + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then4, label %ifend6 +then4: + store i32 1, ptr %retval + br label %ret +ifend6: + %t21 = load ptr, ptr %t0 + %t22 = call i32 @fn_str_eq(ptr %t21, ptr @.str2067) + %t23 = icmp ne i32 %t22, 0 + %t24 = zext i1 %t23 to i32 + store i32 %t24, ptr %t20 + br i1 %t23, label %scend8, label %sc7 +sc7: + %t25 = load ptr, ptr %t0 + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str2068) + %t27 = icmp ne i32 %t26, 0 + %t28 = zext i1 %t27 to i32 + store i32 %t28, ptr %t20 + br label %scend8 +scend8: + %t29 = load i32, ptr %t20 + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then9, label %ifend11 +then9: + store i32 1, ptr %retval + br label %ret +ifend11: + store i32 0, ptr %retval + br label %ret +ret: + %t31 = load i32, ptr %retval + ret i32 %t31 +} + +define ptr @fn_ease_bounce_seg(ptr %arg_u) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t4 = alloca ptr + store ptr %arg_u, ptr %t0 + %t1 = load ptr, ptr %t0 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_fx_mul_code(ptr %t1, ptr %t2) + store ptr %t3, ptr %t4 + %t5 = load ptr, ptr %t4 + %t6 = call ptr @fn_fx_mul_code(ptr %t5, ptr @.str2069) + store ptr %t6, ptr %retval + br label %ret +ret: + %t7 = load ptr, ptr %retval + ret ptr %t7 +} + +define ptr @fn_emit_ease_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t10 = alloca ptr + %t30 = alloca ptr + %t47 = alloca ptr + %t53 = alloca ptr + %t58 = alloca ptr + %t63 = alloca ptr + %t81 = alloca ptr + %t87 = alloca ptr + %t90 = alloca ptr + %t93 = alloca ptr + %t105 = alloca ptr + %t112 = alloca ptr + %t115 = alloca ptr + %t120 = alloca ptr + %t127 = alloca ptr + %t130 = alloca ptr + %t135 = alloca ptr + %t142 = alloca ptr + %t145 = alloca ptr + %t150 = alloca ptr + %t157 = alloca ptr + %t167 = alloca ptr + %t174 = alloca ptr + %t184 = alloca ptr + %t191 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t1 + %t3 = getelementptr inbounds %Cmp_Node, ptr %t2, i32 0, i32 7 + %t4 = load ptr, ptr %t3 + %t5 = getelementptr inbounds %LSlice, ptr %t4, i32 0, i32 0 + %t6 = load ptr, ptr %t5 + %t7 = getelementptr inbounds ptr, ptr %t6, i32 0 + %t8 = load ptr, ptr %t7 + %t9 = call ptr @fn_emit_expr(ptr %t8) + store ptr %t9, ptr %t10 + %t11 = load ptr, ptr %t0 + %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str2070) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then0, label %ifend2 +then0: + %t14 = load ptr, ptr %t10 + %t15 = getelementptr inbounds %Cmp_Val, ptr %t14, i32 0, i32 0 + %t16 = load ptr, ptr %t15 + %t17 = load ptr, ptr %t10 + %t18 = getelementptr inbounds %Cmp_Val, ptr %t17, i32 0, i32 0 + %t19 = load ptr, ptr %t18 + %t20 = call ptr @fn_fx_mul_code(ptr %t16, ptr %t19) + %t21 = call ptr @fn_val(ptr %t20, ptr @.str2071) + store ptr %t21, ptr %retval + br label %ret +ifend2: + %t22 = load ptr, ptr %t0 + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str2072) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then3, label %ifend5 +then3: + %t25 = load ptr, ptr %t10 + %t26 = getelementptr inbounds %Cmp_Val, ptr %t25, i32 0, i32 0 + %t27 = load ptr, ptr %t26 + %t28 = call ptr @fn_str_concat(ptr @.str2073, ptr %t27) + %t29 = call ptr @fn_emit_bind(ptr %t28) + store ptr %t29, ptr %t30 + %t31 = load ptr, ptr %t10 + %t32 = getelementptr inbounds %Cmp_Val, ptr %t31, i32 0, i32 0 + %t33 = load ptr, ptr %t32 + %t34 = load ptr, ptr %t30 + %t35 = call ptr @fn_fx_mul_code(ptr %t33, ptr %t34) + %t36 = call ptr @fn_val(ptr %t35, ptr @.str2074) + store ptr %t36, ptr %retval + br label %ret +ifend5: + %t37 = load ptr, ptr %t0 + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str2075) + %t39 = icmp ne i32 %t38, 0 + br i1 %t39, label %then6, label %ifend8 +then6: + %t40 = load ptr, ptr %t10 + %t41 = getelementptr inbounds %Cmp_Val, ptr %t40, i32 0, i32 0 + %t42 = load ptr, ptr %t41 + %t43 = load ptr, ptr %t10 + %t44 = getelementptr inbounds %Cmp_Val, ptr %t43, i32 0, i32 0 + %t45 = load ptr, ptr %t44 + %t46 = call ptr @fn_fx_mul_code(ptr %t42, ptr %t45) + store ptr %t46, ptr %t47 + %t48 = load ptr, ptr %t47 + %t49 = load ptr, ptr %t10 + %t50 = getelementptr inbounds %Cmp_Val, ptr %t49, i32 0, i32 0 + %t51 = load ptr, ptr %t50 + %t52 = call ptr @fn_fx_mul_code(ptr %t48, ptr %t51) + store ptr %t52, ptr %t53 + %t54 = load ptr, ptr %t47 + %t55 = call ptr @fn_str_concat(ptr @.str2076, ptr %t54) + %t56 = call ptr @fn_str_concat(ptr %t55, ptr @.str2077) + %t57 = call ptr @fn_emit_bind(ptr %t56) + store ptr %t57, ptr %t58 + %t59 = load ptr, ptr %t53 + %t60 = call ptr @fn_str_concat(ptr @.str2078, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str2079) + %t62 = call ptr @fn_emit_bind(ptr %t61) + store ptr %t62, ptr %t63 + %t64 = load ptr, ptr %t58 + %t65 = call ptr @fn_str_concat(ptr @.str2080, ptr %t64) + %t66 = call ptr @fn_str_concat(ptr %t65, ptr @.str2081) + %t67 = load ptr, ptr %t63 + %t68 = call ptr @fn_str_concat(ptr %t66, ptr %t67) + %t69 = call ptr @fn_emit_bind(ptr %t68) + %t70 = call ptr @fn_val(ptr %t69, ptr @.str2082) + store ptr %t70, ptr %retval + br label %ret +ifend8: + %t71 = load ptr, ptr %t0 + %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str2083) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then9, label %ifend11 +then9: + %t74 = load ptr, ptr %t10 + %t75 = getelementptr inbounds %Cmp_Val, ptr %t74, i32 0, i32 0 + %t76 = load ptr, ptr %t75 + %t77 = load ptr, ptr %t10 + %t78 = getelementptr inbounds %Cmp_Val, ptr %t77, i32 0, i32 0 + %t79 = load ptr, ptr %t78 + %t80 = call ptr @fn_fx_mul_code(ptr %t76, ptr %t79) + store ptr %t80, ptr %t81 + %t82 = load ptr, ptr %t81 + %t83 = load ptr, ptr %t10 + %t84 = getelementptr inbounds %Cmp_Val, ptr %t83, i32 0, i32 0 + %t85 = load ptr, ptr %t84 + %t86 = call ptr @fn_fx_mul_code(ptr %t82, ptr %t85) + store ptr %t86, ptr %t87 + %t88 = load ptr, ptr %t87 + %t89 = call ptr @fn_fx_mul_code(ptr %t88, ptr @.str2084) + store ptr %t89, ptr %t90 + %t91 = load ptr, ptr %t81 + %t92 = call ptr @fn_fx_mul_code(ptr %t91, ptr @.str2085) + store ptr %t92, ptr %t93 + %t94 = load ptr, ptr %t90 + %t95 = call ptr @fn_str_concat(ptr @.str2086, ptr %t94) + %t96 = call ptr @fn_str_concat(ptr %t95, ptr @.str2087) + %t97 = load ptr, ptr %t93 + %t98 = call ptr @fn_str_concat(ptr %t96, ptr %t97) + %t99 = call ptr @fn_emit_bind(ptr %t98) + %t100 = call ptr @fn_val(ptr %t99, ptr @.str2088) + store ptr %t100, ptr %retval + br label %ret +ifend11: + %t101 = load ptr, ptr %t10 + %t102 = getelementptr inbounds %Cmp_Val, ptr %t101, i32 0, i32 0 + %t103 = load ptr, ptr %t102 + %t104 = call ptr @fn_ease_bounce_seg(ptr %t103) + store ptr %t104, ptr %t105 + %t106 = load ptr, ptr %t10 + %t107 = getelementptr inbounds %Cmp_Val, ptr %t106, i32 0, i32 0 + %t108 = load ptr, ptr %t107 + %t109 = call ptr @fn_str_concat(ptr @.str2089, ptr %t108) + %t110 = call ptr @fn_str_concat(ptr %t109, ptr @.str2090) + %t111 = call ptr @fn_emit_bind(ptr %t110) + store ptr %t111, ptr %t112 + %t113 = load ptr, ptr %t112 + %t114 = call ptr @fn_ease_bounce_seg(ptr %t113) + store ptr %t114, ptr %t115 + %t116 = load ptr, ptr %t115 + %t117 = call ptr @fn_str_concat(ptr @.str2091, ptr %t116) + %t118 = call ptr @fn_str_concat(ptr %t117, ptr @.str2092) + %t119 = call ptr @fn_emit_bind(ptr %t118) + store ptr %t119, ptr %t120 + %t121 = load ptr, ptr %t10 + %t122 = getelementptr inbounds %Cmp_Val, ptr %t121, i32 0, i32 0 + %t123 = load ptr, ptr %t122 + %t124 = call ptr @fn_str_concat(ptr @.str2093, ptr %t123) + %t125 = call ptr @fn_str_concat(ptr %t124, ptr @.str2094) + %t126 = call ptr @fn_emit_bind(ptr %t125) + store ptr %t126, ptr %t127 + %t128 = load ptr, ptr %t127 + %t129 = call ptr @fn_ease_bounce_seg(ptr %t128) + store ptr %t129, ptr %t130 + %t131 = load ptr, ptr %t130 + %t132 = call ptr @fn_str_concat(ptr @.str2095, ptr %t131) + %t133 = call ptr @fn_str_concat(ptr %t132, ptr @.str2096) + %t134 = call ptr @fn_emit_bind(ptr %t133) + store ptr %t134, ptr %t135 + %t136 = load ptr, ptr %t10 + %t137 = getelementptr inbounds %Cmp_Val, ptr %t136, i32 0, i32 0 + %t138 = load ptr, ptr %t137 + %t139 = call ptr @fn_str_concat(ptr @.str2097, ptr %t138) + %t140 = call ptr @fn_str_concat(ptr %t139, ptr @.str2098) + %t141 = call ptr @fn_emit_bind(ptr %t140) + store ptr %t141, ptr %t142 + %t143 = load ptr, ptr %t142 + %t144 = call ptr @fn_ease_bounce_seg(ptr %t143) + store ptr %t144, ptr %t145 + %t146 = load ptr, ptr %t145 + %t147 = call ptr @fn_str_concat(ptr @.str2099, ptr %t146) + %t148 = call ptr @fn_str_concat(ptr %t147, ptr @.str2100) + %t149 = call ptr @fn_emit_bind(ptr %t148) + store ptr %t149, ptr %t150 + %t151 = load ptr, ptr %t10 + %t152 = getelementptr inbounds %Cmp_Val, ptr %t151, i32 0, i32 0 + %t153 = load ptr, ptr %t152 + %t154 = call ptr @fn_str_concat(ptr @.str2101, ptr %t153) + %t155 = call ptr @fn_str_concat(ptr %t154, ptr @.str2102) + %t156 = call ptr @fn_emit_bind(ptr %t155) + store ptr %t156, ptr %t157 + %t158 = load ptr, ptr %t157 + %t159 = call ptr @fn_str_concat(ptr @.str2103, ptr %t158) + %t160 = call ptr @fn_str_concat(ptr %t159, ptr @.str2104) + %t161 = load ptr, ptr %t135 + %t162 = call ptr @fn_str_concat(ptr %t160, ptr %t161) + %t163 = call ptr @fn_str_concat(ptr %t162, ptr @.str2105) + %t164 = load ptr, ptr %t150 + %t165 = call ptr @fn_str_concat(ptr %t163, ptr %t164) + %t166 = call ptr @fn_emit_bind(ptr %t165) + store ptr %t166, ptr %t167 + %t168 = load ptr, ptr %t10 + %t169 = getelementptr inbounds %Cmp_Val, ptr %t168, i32 0, i32 0 + %t170 = load ptr, ptr %t169 + %t171 = call ptr @fn_str_concat(ptr @.str2106, ptr %t170) + %t172 = call ptr @fn_str_concat(ptr %t171, ptr @.str2107) + %t173 = call ptr @fn_emit_bind(ptr %t172) + store ptr %t173, ptr %t174 + %t175 = load ptr, ptr %t174 + %t176 = call ptr @fn_str_concat(ptr @.str2108, ptr %t175) + %t177 = call ptr @fn_str_concat(ptr %t176, ptr @.str2109) + %t178 = load ptr, ptr %t120 + %t179 = call ptr @fn_str_concat(ptr %t177, ptr %t178) + %t180 = call ptr @fn_str_concat(ptr %t179, ptr @.str2110) + %t181 = load ptr, ptr %t167 + %t182 = call ptr @fn_str_concat(ptr %t180, ptr %t181) + %t183 = call ptr @fn_emit_bind(ptr %t182) + store ptr %t183, ptr %t184 + %t185 = load ptr, ptr %t10 + %t186 = getelementptr inbounds %Cmp_Val, ptr %t185, i32 0, i32 0 + %t187 = load ptr, ptr %t186 + %t188 = call ptr @fn_str_concat(ptr @.str2111, ptr %t187) + %t189 = call ptr @fn_str_concat(ptr %t188, ptr @.str2112) + %t190 = call ptr @fn_emit_bind(ptr %t189) + store ptr %t190, ptr %t191 + %t192 = load ptr, ptr %t191 + %t193 = call ptr @fn_str_concat(ptr @.str2113, ptr %t192) + %t194 = call ptr @fn_str_concat(ptr %t193, ptr @.str2114) + %t195 = load ptr, ptr %t105 + %t196 = call ptr @fn_str_concat(ptr %t194, ptr %t195) + %t197 = call ptr @fn_str_concat(ptr %t196, ptr @.str2115) + %t198 = load ptr, ptr %t184 + %t199 = call ptr @fn_str_concat(ptr %t197, ptr %t198) + %t200 = call ptr @fn_emit_bind(ptr %t199) + %t201 = call ptr @fn_val(ptr %t200, ptr @.str2116) + store ptr %t201, ptr %retval + br label %ret +ret: + %t202 = load ptr, ptr %retval + ret ptr %t202 +} + +define i32 @fn_is_collide_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t12 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2117) + %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_str_eq(ptr %t6, ptr @.str2118) + %t8 = icmp ne i32 %t7, 0 + %t9 = zext i1 %t8 to i32 + store i32 %t9, ptr %t1 + br label %scend1 +scend1: + %t10 = load i32, ptr %t1 + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then2, label %ifend4 +then2: + store i32 1, ptr %retval + br label %ret +ifend4: + %t13 = load ptr, ptr %t0 + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str2119) + %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_str_eq(ptr %t17, ptr @.str2120) + %t19 = icmp ne i32 %t18, 0 + %t20 = zext i1 %t19 to i32 + store i32 %t20, ptr %t12 + br label %scend6 +scend6: + %t21 = load i32, ptr %t12 + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then7, label %ifend9 +then7: + store i32 1, ptr %retval + br label %ret +ifend9: + store i32 0, ptr %retval + br label %ret +ret: + %t23 = load i32, ptr %retval + ret i32 %t23 +} + +define ptr @fn_coll_sq_sum(ptr %arg_dx, ptr %arg_dy) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t6 = alloca ptr + %t11 = alloca ptr + %t18 = alloca ptr + %t25 = alloca ptr + store ptr %arg_dx, ptr %t0 + store ptr %arg_dy, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_str_concat(ptr @.str2121, ptr %t2) + %t4 = call ptr @fn_str_concat(ptr %t3, ptr @.str2122) + %t5 = call ptr @fn_emit_bind(ptr %t4) + store ptr %t5, ptr %t6 + %t7 = load ptr, ptr %t1 + %t8 = call ptr @fn_str_concat(ptr @.str2123, ptr %t7) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str2124) + %t10 = call ptr @fn_emit_bind(ptr %t9) + store ptr %t10, ptr %t11 + %t12 = load ptr, ptr %t6 + %t13 = call ptr @fn_str_concat(ptr @.str2125, ptr %t12) + %t14 = call ptr @fn_str_concat(ptr %t13, ptr @.str2126) + %t15 = load ptr, ptr %t6 + %t16 = call ptr @fn_str_concat(ptr %t14, ptr %t15) + %t17 = call ptr @fn_emit_bind(ptr %t16) + store ptr %t17, ptr %t18 + %t19 = load ptr, ptr %t11 + %t20 = call ptr @fn_str_concat(ptr @.str2127, ptr %t19) + %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str2128) + %t22 = load ptr, ptr %t11 + %t23 = call ptr @fn_str_concat(ptr %t21, ptr %t22) + %t24 = call ptr @fn_emit_bind(ptr %t23) + store ptr %t24, ptr %t25 + %t26 = load ptr, ptr %t18 + %t27 = call ptr @fn_str_concat(ptr @.str2129, ptr %t26) + %t28 = call ptr @fn_str_concat(ptr %t27, ptr @.str2130) + %t29 = load ptr, ptr %t25 + %t30 = call ptr @fn_str_concat(ptr %t28, ptr %t29) + %t31 = call ptr @fn_emit_bind(ptr %t30) + store ptr %t31, ptr %retval + br label %ret +ret: + %t32 = load ptr, ptr %retval + ret ptr %t32 +} + +define ptr @fn_coll_clamp(ptr %arg_v, ptr %arg_lo, ptr %arg_hi) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t9 = alloca ptr + %t19 = alloca ptr + %t26 = alloca ptr + store ptr %arg_v, ptr %t0 + store ptr %arg_lo, ptr %t1 + store ptr %arg_hi, ptr %t2 + %t3 = load ptr, ptr %t0 + %t4 = call ptr @fn_str_concat(ptr @.str2131, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str2132) + %t6 = load ptr, ptr %t2 + %t7 = call ptr @fn_str_concat(ptr %t5, ptr %t6) + %t8 = call ptr @fn_emit_bind(ptr %t7) + store ptr %t8, ptr %t9 + %t10 = load ptr, ptr %t9 + %t11 = call ptr @fn_str_concat(ptr @.str2133, ptr %t10) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str2134) + %t13 = load ptr, ptr %t0 + %t14 = call ptr @fn_str_concat(ptr %t12, ptr %t13) + %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str2135) + %t16 = load ptr, ptr %t2 + %t17 = call ptr @fn_str_concat(ptr %t15, ptr %t16) + %t18 = call ptr @fn_emit_bind(ptr %t17) + store ptr %t18, ptr %t19 + %t20 = load ptr, ptr %t1 + %t21 = call ptr @fn_str_concat(ptr @.str2136, ptr %t20) + %t22 = call ptr @fn_str_concat(ptr %t21, ptr @.str2137) + %t23 = load ptr, ptr %t19 + %t24 = call ptr @fn_str_concat(ptr %t22, ptr %t23) + %t25 = call ptr @fn_emit_bind(ptr %t24) + store ptr %t25, ptr %t26 + %t27 = load ptr, ptr %t26 + %t28 = call ptr @fn_str_concat(ptr @.str2138, ptr %t27) + %t29 = call ptr @fn_str_concat(ptr %t28, ptr @.str2139) + %t30 = load ptr, ptr %t1 + %t31 = call ptr @fn_str_concat(ptr %t29, ptr %t30) + %t32 = call ptr @fn_str_concat(ptr %t31, ptr @.str2140) + %t33 = load ptr, ptr %t19 + %t34 = call ptr @fn_str_concat(ptr %t32, ptr %t33) + %t35 = call ptr @fn_emit_bind(ptr %t34) + store ptr %t35, ptr %retval + br label %ret +ret: + %t36 = load ptr, ptr %retval + ret ptr %t36 +} + +define ptr @fn_emit_collide_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t13 = alloca ptr + %t22 = alloca ptr + %t31 = alloca ptr + %t40 = alloca ptr + %t49 = alloca ptr + %t58 = alloca ptr + %t67 = alloca ptr + %t76 = alloca ptr + %t87 = alloca ptr + %t98 = alloca ptr + %t109 = alloca ptr + %t120 = alloca ptr + %t129 = alloca ptr + %t138 = alloca ptr + %t147 = alloca ptr + %t156 = alloca ptr + %t163 = alloca ptr + %t170 = alloca ptr + %t177 = alloca ptr + %t194 = alloca ptr + %t203 = alloca ptr + %t212 = alloca ptr + %t221 = alloca ptr + %t230 = alloca ptr + %t239 = alloca ptr + %t250 = alloca ptr + %t261 = alloca ptr + %t272 = alloca ptr + %t281 = alloca ptr + %t292 = alloca ptr + %t301 = alloca ptr + %t308 = alloca ptr + %t315 = alloca ptr + %t322 = alloca ptr + %t339 = alloca ptr + %t348 = alloca ptr + %t357 = alloca ptr + %t366 = alloca ptr + %t375 = alloca ptr + %t384 = alloca ptr + %t395 = alloca ptr + %t406 = alloca ptr + %t410 = alloca ptr + %t421 = alloca ptr + %t426 = alloca ptr + %t433 = alloca ptr + %t440 = alloca ptr + %t454 = alloca ptr + %t463 = alloca ptr + %t472 = alloca ptr + %t481 = alloca ptr + %t490 = alloca ptr + %t499 = alloca ptr + %t508 = alloca ptr + %t519 = alloca ptr + %t530 = alloca ptr + %t539 = alloca ptr + %t548 = alloca ptr + %t557 = alloca ptr + %t566 = alloca ptr + %t570 = alloca ptr + %t577 = alloca ptr + %t584 = alloca ptr + %t591 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2141) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = load ptr, ptr %t1 + %t6 = getelementptr inbounds %Cmp_Node, ptr %t5, i32 0, i32 7 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 0 + %t9 = load ptr, ptr %t8 + %t10 = getelementptr inbounds ptr, ptr %t9, i32 0 + %t11 = load ptr, ptr %t10 + %t12 = call ptr @fn_emit_expr(ptr %t11) + store ptr %t12, ptr %t13 + %t14 = load ptr, ptr %t1 + %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 7 + %t16 = load ptr, ptr %t15 + %t17 = getelementptr inbounds %LSlice, ptr %t16, i32 0, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = getelementptr inbounds ptr, ptr %t18, i32 1 + %t20 = load ptr, ptr %t19 + %t21 = call ptr @fn_emit_expr(ptr %t20) + store ptr %t21, ptr %t22 + %t23 = load ptr, ptr %t1 + %t24 = getelementptr inbounds %Cmp_Node, ptr %t23, i32 0, i32 7 + %t25 = load ptr, ptr %t24 + %t26 = getelementptr inbounds %LSlice, ptr %t25, i32 0, i32 0 + %t27 = load ptr, ptr %t26 + %t28 = getelementptr inbounds ptr, ptr %t27, i32 2 + %t29 = load ptr, ptr %t28 + %t30 = call ptr @fn_emit_expr(ptr %t29) + store ptr %t30, ptr %t31 + %t32 = load ptr, ptr %t1 + %t33 = getelementptr inbounds %Cmp_Node, ptr %t32, i32 0, i32 7 + %t34 = load ptr, ptr %t33 + %t35 = getelementptr inbounds %LSlice, ptr %t34, i32 0, i32 0 + %t36 = load ptr, ptr %t35 + %t37 = getelementptr inbounds ptr, ptr %t36, i32 3 + %t38 = load ptr, ptr %t37 + %t39 = call ptr @fn_emit_expr(ptr %t38) + store ptr %t39, ptr %t40 + %t41 = load ptr, ptr %t1 + %t42 = getelementptr inbounds %Cmp_Node, ptr %t41, i32 0, i32 7 + %t43 = load ptr, ptr %t42 + %t44 = getelementptr inbounds %LSlice, ptr %t43, i32 0, i32 0 + %t45 = load ptr, ptr %t44 + %t46 = getelementptr inbounds ptr, ptr %t45, i32 4 + %t47 = load ptr, ptr %t46 + %t48 = call ptr @fn_emit_expr(ptr %t47) + store ptr %t48, ptr %t49 %t50 = load ptr, ptr %t1 %t51 = getelementptr inbounds %Cmp_Node, ptr %t50, i32 0, i32 7 %t52 = load ptr, ptr %t51 %t53 = getelementptr inbounds %LSlice, ptr %t52, i32 0, i32 0 %t54 = load ptr, ptr %t53 - %t55 = getelementptr inbounds ptr, ptr %t54, i32 0 + %t55 = getelementptr inbounds ptr, ptr %t54, i32 5 %t56 = load ptr, ptr %t55 %t57 = call ptr @fn_emit_expr(ptr %t56) store ptr %t57, ptr %t58 @@ -16740,128 +24707,1772 @@ then5: %t61 = load ptr, ptr %t60 %t62 = getelementptr inbounds %LSlice, ptr %t61, i32 0, i32 0 %t63 = load ptr, ptr %t62 - %t64 = getelementptr inbounds ptr, ptr %t63, i32 1 + %t64 = getelementptr inbounds ptr, ptr %t63, i32 6 %t65 = load ptr, ptr %t64 %t66 = call ptr @fn_emit_expr(ptr %t65) store ptr %t66, ptr %t67 - store ptr @.str691, ptr %t68 - %t69 = load ptr, ptr %t0 - %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str692) - %t71 = icmp ne i32 %t70, 0 - br i1 %t71, label %then8, label %ifend10 -then8: - store ptr @.str693, ptr %t68 - br label %ifend10 -ifend10: - %t72 = load ptr, ptr %t68 - %t73 = call ptr @fn_str_concat(ptr @.str694, ptr %t72) - %t74 = call ptr @fn_str_concat(ptr %t73, ptr @.str695) - %t75 = load ptr, ptr %t58 - %t76 = getelementptr inbounds %Cmp_Val, ptr %t75, i32 0, i32 0 - %t77 = load ptr, ptr %t76 - %t78 = call ptr @fn_str_concat(ptr %t74, ptr %t77) - %t79 = call ptr @fn_str_concat(ptr %t78, ptr @.str696) - %t80 = load ptr, ptr %t67 - %t81 = getelementptr inbounds %Cmp_Val, ptr %t80, i32 0, i32 0 - %t82 = load ptr, ptr %t81 - %t83 = call ptr @fn_str_concat(ptr %t79, ptr %t82) - %t84 = call ptr @fn_emit_bind(ptr %t83) - store ptr %t84, ptr %t85 - %t86 = load ptr, ptr %t85 - %t87 = call ptr @fn_str_concat(ptr @.str697, ptr %t86) - %t88 = call ptr @fn_str_concat(ptr %t87, ptr @.str698) - %t89 = load ptr, ptr %t58 - %t90 = getelementptr inbounds %Cmp_Val, ptr %t89, i32 0, i32 0 - %t91 = load ptr, ptr %t90 - %t92 = call ptr @fn_str_concat(ptr %t88, ptr %t91) - %t93 = call ptr @fn_str_concat(ptr %t92, ptr @.str699) - %t94 = load ptr, ptr %t67 - %t95 = getelementptr inbounds %Cmp_Val, ptr %t94, i32 0, i32 0 - %t96 = load ptr, ptr %t95 - %t97 = call ptr @fn_str_concat(ptr %t93, ptr %t96) - %t98 = call ptr @fn_emit_bind(ptr %t97) - %t99 = call ptr @fn_val(ptr %t98, ptr @.str700) - store ptr %t99, ptr %retval - br label %ret -ifend7: - %t100 = load ptr, ptr %t1 - %t101 = getelementptr inbounds %Cmp_Node, ptr %t100, i32 0, i32 7 - %t102 = load ptr, ptr %t101 - %t103 = getelementptr inbounds %LSlice, ptr %t102, i32 0, i32 0 - %t104 = load ptr, ptr %t103 - %t105 = getelementptr inbounds ptr, ptr %t104, i32 0 + %t68 = load ptr, ptr %t1 + %t69 = getelementptr inbounds %Cmp_Node, ptr %t68, i32 0, i32 7 + %t70 = load ptr, ptr %t69 + %t71 = getelementptr inbounds %LSlice, ptr %t70, i32 0, i32 0 + %t72 = load ptr, ptr %t71 + %t73 = getelementptr inbounds ptr, ptr %t72, i32 7 + %t74 = load ptr, ptr %t73 + %t75 = call ptr @fn_emit_expr(ptr %t74) + store ptr %t75, ptr %t76 + %t77 = load ptr, ptr %t13 + %t78 = getelementptr inbounds %Cmp_Val, ptr %t77, i32 0, i32 0 + %t79 = load ptr, ptr %t78 + %t80 = call ptr @fn_str_concat(ptr @.str2142, ptr %t79) + %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str2143) + %t82 = load ptr, ptr %t31 + %t83 = getelementptr inbounds %Cmp_Val, ptr %t82, i32 0, i32 0 + %t84 = load ptr, ptr %t83 + %t85 = call ptr @fn_str_concat(ptr %t81, ptr %t84) + %t86 = call ptr @fn_emit_bind(ptr %t85) + store ptr %t86, ptr %t87 + %t88 = load ptr, ptr %t49 + %t89 = getelementptr inbounds %Cmp_Val, ptr %t88, i32 0, i32 0 + %t90 = load ptr, ptr %t89 + %t91 = call ptr @fn_str_concat(ptr @.str2144, ptr %t90) + %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str2145) + %t93 = load ptr, ptr %t67 + %t94 = getelementptr inbounds %Cmp_Val, ptr %t93, i32 0, i32 0 + %t95 = load ptr, ptr %t94 + %t96 = call ptr @fn_str_concat(ptr %t92, ptr %t95) + %t97 = call ptr @fn_emit_bind(ptr %t96) + store ptr %t97, ptr %t98 + %t99 = load ptr, ptr %t22 + %t100 = getelementptr inbounds %Cmp_Val, ptr %t99, i32 0, i32 0 + %t101 = load ptr, ptr %t100 + %t102 = call ptr @fn_str_concat(ptr @.str2146, ptr %t101) + %t103 = call ptr @fn_str_concat(ptr %t102, ptr @.str2147) + %t104 = load ptr, ptr %t40 + %t105 = getelementptr inbounds %Cmp_Val, ptr %t104, i32 0, i32 0 %t106 = load ptr, ptr %t105 - %t107 = call ptr @fn_emit_expr(ptr %t106) - store ptr %t107, ptr %t108 - %t109 = load ptr, ptr %t1 - %t110 = getelementptr inbounds %Cmp_Node, ptr %t109, i32 0, i32 7 - %t111 = load ptr, ptr %t110 - %t112 = getelementptr inbounds %LSlice, ptr %t111, i32 0, i32 0 - %t113 = load ptr, ptr %t112 - %t114 = getelementptr inbounds ptr, ptr %t113, i32 1 - %t115 = load ptr, ptr %t114 - %t116 = call ptr @fn_emit_expr(ptr %t115) - store ptr %t116, ptr %t117 - %t118 = load ptr, ptr %t1 - %t119 = getelementptr inbounds %Cmp_Node, ptr %t118, i32 0, i32 7 - %t120 = load ptr, ptr %t119 - %t121 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 0 - %t122 = load ptr, ptr %t121 - %t123 = getelementptr inbounds ptr, ptr %t122, i32 2 - %t124 = load ptr, ptr %t123 - %t125 = call ptr @fn_emit_expr(ptr %t124) - store ptr %t125, ptr %t126 - %t127 = load ptr, ptr %t108 - %t128 = getelementptr inbounds %Cmp_Val, ptr %t127, i32 0, i32 0 - %t129 = load ptr, ptr %t128 - %t130 = call ptr @fn_str_concat(ptr @.str701, ptr %t129) - %t131 = call ptr @fn_str_concat(ptr %t130, ptr @.str702) - %t132 = load ptr, ptr %t126 - %t133 = getelementptr inbounds %Cmp_Val, ptr %t132, i32 0, i32 0 - %t134 = load ptr, ptr %t133 - %t135 = call ptr @fn_str_concat(ptr %t131, ptr %t134) - %t136 = call ptr @fn_emit_bind(ptr %t135) - store ptr %t136, ptr %t137 - %t138 = load ptr, ptr %t137 - %t139 = call ptr @fn_str_concat(ptr @.str703, ptr %t138) - %t140 = call ptr @fn_str_concat(ptr %t139, ptr @.str704) - %t141 = load ptr, ptr %t108 - %t142 = getelementptr inbounds %Cmp_Val, ptr %t141, i32 0, i32 0 - %t143 = load ptr, ptr %t142 - %t144 = call ptr @fn_str_concat(ptr %t140, ptr %t143) - %t145 = call ptr @fn_str_concat(ptr %t144, ptr @.str705) - %t146 = load ptr, ptr %t126 - %t147 = getelementptr inbounds %Cmp_Val, ptr %t146, i32 0, i32 0 - %t148 = load ptr, ptr %t147 - %t149 = call ptr @fn_str_concat(ptr %t145, 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 = call ptr @fn_str_concat(ptr @.str706, ptr %t154) - %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str707) - %t157 = load ptr, ptr %t151 - %t158 = call ptr @fn_str_concat(ptr %t156, ptr %t157) - %t159 = call ptr @fn_emit_bind(ptr %t158) - store ptr %t159, ptr %t160 - %t161 = load ptr, ptr %t160 - %t162 = call ptr @fn_str_concat(ptr @.str708, ptr %t161) - %t163 = call ptr @fn_str_concat(ptr %t162, ptr @.str709) - %t164 = load ptr, ptr %t117 - %t165 = getelementptr inbounds %Cmp_Val, ptr %t164, i32 0, i32 0 - %t166 = load ptr, ptr %t165 - %t167 = call ptr @fn_str_concat(ptr %t163, ptr %t166) - %t168 = call ptr @fn_str_concat(ptr %t167, ptr @.str710) - %t169 = load ptr, ptr %t151 - %t170 = call ptr @fn_str_concat(ptr %t168, ptr %t169) - %t171 = call ptr @fn_emit_bind(ptr %t170) - %t172 = call ptr @fn_val(ptr %t171, ptr @.str711) - store ptr %t172, ptr %retval + %t107 = call ptr @fn_str_concat(ptr %t103, ptr %t106) + %t108 = call ptr @fn_emit_bind(ptr %t107) + store ptr %t108, ptr %t109 + %t110 = load ptr, ptr %t58 + %t111 = getelementptr inbounds %Cmp_Val, ptr %t110, i32 0, i32 0 + %t112 = load ptr, ptr %t111 + %t113 = call ptr @fn_str_concat(ptr @.str2148, ptr %t112) + %t114 = call ptr @fn_str_concat(ptr %t113, ptr @.str2149) + %t115 = load ptr, ptr %t76 + %t116 = getelementptr inbounds %Cmp_Val, ptr %t115, i32 0, i32 0 + %t117 = load ptr, ptr %t116 + %t118 = call ptr @fn_str_concat(ptr %t114, ptr %t117) + %t119 = call ptr @fn_emit_bind(ptr %t118) + store ptr %t119, ptr %t120 + %t121 = load ptr, ptr %t13 + %t122 = getelementptr inbounds %Cmp_Val, ptr %t121, i32 0, i32 0 + %t123 = load ptr, ptr %t122 + %t124 = call ptr @fn_str_concat(ptr @.str2150, ptr %t123) + %t125 = call ptr @fn_str_concat(ptr %t124, ptr @.str2151) + %t126 = load ptr, ptr %t98 + %t127 = call ptr @fn_str_concat(ptr %t125, ptr %t126) + %t128 = call ptr @fn_emit_bind(ptr %t127) + store ptr %t128, ptr %t129 + %t130 = load ptr, ptr %t49 + %t131 = getelementptr inbounds %Cmp_Val, ptr %t130, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + %t133 = call ptr @fn_str_concat(ptr @.str2152, ptr %t132) + %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str2153) + %t135 = load ptr, ptr %t87 + %t136 = call ptr @fn_str_concat(ptr %t134, ptr %t135) + %t137 = call ptr @fn_emit_bind(ptr %t136) + store ptr %t137, ptr %t138 + %t139 = load ptr, ptr %t22 + %t140 = getelementptr inbounds %Cmp_Val, ptr %t139, i32 0, i32 0 + %t141 = load ptr, ptr %t140 + %t142 = call ptr @fn_str_concat(ptr @.str2154, ptr %t141) + %t143 = call ptr @fn_str_concat(ptr %t142, ptr @.str2155) + %t144 = load ptr, ptr %t120 + %t145 = call ptr @fn_str_concat(ptr %t143, ptr %t144) + %t146 = call ptr @fn_emit_bind(ptr %t145) + store ptr %t146, ptr %t147 + %t148 = load ptr, ptr %t58 + %t149 = getelementptr inbounds %Cmp_Val, ptr %t148, i32 0, i32 0 + %t150 = load ptr, ptr %t149 + %t151 = call ptr @fn_str_concat(ptr @.str2156, ptr %t150) + %t152 = call ptr @fn_str_concat(ptr %t151, ptr @.str2157) + %t153 = load ptr, ptr %t109 + %t154 = call ptr @fn_str_concat(ptr %t152, ptr %t153) + %t155 = call ptr @fn_emit_bind(ptr %t154) + store ptr %t155, ptr %t156 + %t157 = load ptr, ptr %t129 + %t158 = call ptr @fn_str_concat(ptr @.str2158, ptr %t157) + %t159 = call ptr @fn_str_concat(ptr %t158, ptr @.str2159) + %t160 = load ptr, ptr %t138 + %t161 = call ptr @fn_str_concat(ptr %t159, ptr %t160) + %t162 = call ptr @fn_emit_bind(ptr %t161) + store ptr %t162, ptr %t163 + %t164 = load ptr, ptr %t147 + %t165 = call ptr @fn_str_concat(ptr @.str2160, ptr %t164) + %t166 = call ptr @fn_str_concat(ptr %t165, ptr @.str2161) + %t167 = load ptr, ptr %t156 + %t168 = call ptr @fn_str_concat(ptr %t166, ptr %t167) + %t169 = call ptr @fn_emit_bind(ptr %t168) + store ptr %t169, ptr %t170 + %t171 = load ptr, ptr %t163 + %t172 = call ptr @fn_str_concat(ptr @.str2162, ptr %t171) + %t173 = call ptr @fn_str_concat(ptr %t172, ptr @.str2163) + %t174 = load ptr, ptr %t170 + %t175 = call ptr @fn_str_concat(ptr %t173, ptr %t174) + %t176 = call ptr @fn_emit_bind(ptr %t175) + store ptr %t176, ptr %t177 + %t178 = load ptr, ptr %t177 + %t179 = call ptr @fn_str_concat(ptr @.str2164, ptr %t178) + %t180 = call ptr @fn_str_concat(ptr %t179, ptr @.str2165) + %t181 = call ptr @fn_emit_bind(ptr %t180) + %t182 = call ptr @fn_val(ptr %t181, ptr @.str2166) + store ptr %t182, ptr %retval + br label %ret +ifend2: + %t183 = load ptr, ptr %t0 + %t184 = call i32 @fn_str_eq(ptr %t183, ptr @.str2167) + %t185 = icmp ne i32 %t184, 0 + br i1 %t185, label %then3, label %ifend5 +then3: + %t186 = load ptr, ptr %t1 + %t187 = getelementptr inbounds %Cmp_Node, ptr %t186, i32 0, i32 7 + %t188 = load ptr, ptr %t187 + %t189 = getelementptr inbounds %LSlice, ptr %t188, i32 0, i32 0 + %t190 = load ptr, ptr %t189 + %t191 = getelementptr inbounds ptr, ptr %t190, i32 0 + %t192 = load ptr, ptr %t191 + %t193 = call ptr @fn_emit_expr(ptr %t192) + store ptr %t193, ptr %t194 + %t195 = load ptr, ptr %t1 + %t196 = getelementptr inbounds %Cmp_Node, ptr %t195, i32 0, i32 7 + %t197 = load ptr, ptr %t196 + %t198 = getelementptr inbounds %LSlice, ptr %t197, i32 0, i32 0 + %t199 = load ptr, ptr %t198 + %t200 = getelementptr inbounds ptr, ptr %t199, i32 1 + %t201 = load ptr, ptr %t200 + %t202 = call ptr @fn_emit_expr(ptr %t201) + store ptr %t202, ptr %t203 + %t204 = load ptr, ptr %t1 + %t205 = getelementptr inbounds %Cmp_Node, ptr %t204, i32 0, i32 7 + %t206 = load ptr, ptr %t205 + %t207 = getelementptr inbounds %LSlice, ptr %t206, i32 0, i32 0 + %t208 = load ptr, ptr %t207 + %t209 = getelementptr inbounds ptr, ptr %t208, i32 2 + %t210 = load ptr, ptr %t209 + %t211 = call ptr @fn_emit_expr(ptr %t210) + store ptr %t211, ptr %t212 + %t213 = load ptr, ptr %t1 + %t214 = getelementptr inbounds %Cmp_Node, ptr %t213, i32 0, i32 7 + %t215 = load ptr, ptr %t214 + %t216 = getelementptr inbounds %LSlice, ptr %t215, i32 0, i32 0 + %t217 = load ptr, ptr %t216 + %t218 = getelementptr inbounds ptr, ptr %t217, i32 3 + %t219 = load ptr, ptr %t218 + %t220 = call ptr @fn_emit_expr(ptr %t219) + store ptr %t220, ptr %t221 + %t222 = load ptr, ptr %t1 + %t223 = getelementptr inbounds %Cmp_Node, ptr %t222, i32 0, i32 7 + %t224 = load ptr, ptr %t223 + %t225 = getelementptr inbounds %LSlice, ptr %t224, i32 0, i32 0 + %t226 = load ptr, ptr %t225 + %t227 = getelementptr inbounds ptr, ptr %t226, i32 4 + %t228 = load ptr, ptr %t227 + %t229 = call ptr @fn_emit_expr(ptr %t228) + store ptr %t229, ptr %t230 + %t231 = load ptr, ptr %t1 + %t232 = getelementptr inbounds %Cmp_Node, ptr %t231, i32 0, i32 7 + %t233 = load ptr, ptr %t232 + %t234 = getelementptr inbounds %LSlice, ptr %t233, i32 0, i32 0 + %t235 = load ptr, ptr %t234 + %t236 = getelementptr inbounds ptr, ptr %t235, i32 5 + %t237 = load ptr, ptr %t236 + %t238 = call ptr @fn_emit_expr(ptr %t237) + store ptr %t238, ptr %t239 + %t240 = load ptr, ptr %t212 + %t241 = getelementptr inbounds %Cmp_Val, ptr %t240, i32 0, i32 0 + %t242 = load ptr, ptr %t241 + %t243 = call ptr @fn_str_concat(ptr @.str2168, ptr %t242) + %t244 = call ptr @fn_str_concat(ptr %t243, ptr @.str2169) + %t245 = load ptr, ptr %t230 + %t246 = getelementptr inbounds %Cmp_Val, ptr %t245, i32 0, i32 0 + %t247 = load ptr, ptr %t246 + %t248 = call ptr @fn_str_concat(ptr %t244, ptr %t247) + %t249 = call ptr @fn_emit_bind(ptr %t248) + store ptr %t249, ptr %t250 + %t251 = load ptr, ptr %t221 + %t252 = getelementptr inbounds %Cmp_Val, ptr %t251, i32 0, i32 0 + %t253 = load ptr, ptr %t252 + %t254 = call ptr @fn_str_concat(ptr @.str2170, ptr %t253) + %t255 = call ptr @fn_str_concat(ptr %t254, ptr @.str2171) + %t256 = load ptr, ptr %t239 + %t257 = getelementptr inbounds %Cmp_Val, ptr %t256, i32 0, i32 0 + %t258 = load ptr, ptr %t257 + %t259 = call ptr @fn_str_concat(ptr %t255, ptr %t258) + %t260 = call ptr @fn_emit_bind(ptr %t259) + store ptr %t260, ptr %t261 + %t262 = load ptr, ptr %t194 + %t263 = getelementptr inbounds %Cmp_Val, ptr %t262, i32 0, i32 0 + %t264 = load ptr, ptr %t263 + %t265 = call ptr @fn_str_concat(ptr @.str2172, ptr %t264) + %t266 = call ptr @fn_str_concat(ptr %t265, ptr @.str2173) + %t267 = load ptr, ptr %t212 + %t268 = getelementptr inbounds %Cmp_Val, ptr %t267, i32 0, i32 0 + %t269 = load ptr, ptr %t268 + %t270 = call ptr @fn_str_concat(ptr %t266, ptr %t269) + %t271 = call ptr @fn_emit_bind(ptr %t270) + store ptr %t271, ptr %t272 + %t273 = load ptr, ptr %t194 + %t274 = getelementptr inbounds %Cmp_Val, ptr %t273, i32 0, i32 0 + %t275 = load ptr, ptr %t274 + %t276 = call ptr @fn_str_concat(ptr @.str2174, ptr %t275) + %t277 = call ptr @fn_str_concat(ptr %t276, ptr @.str2175) + %t278 = load ptr, ptr %t250 + %t279 = call ptr @fn_str_concat(ptr %t277, ptr %t278) + %t280 = call ptr @fn_emit_bind(ptr %t279) + store ptr %t280, ptr %t281 + %t282 = load ptr, ptr %t203 + %t283 = getelementptr inbounds %Cmp_Val, ptr %t282, i32 0, i32 0 + %t284 = load ptr, ptr %t283 + %t285 = call ptr @fn_str_concat(ptr @.str2176, ptr %t284) + %t286 = call ptr @fn_str_concat(ptr %t285, ptr @.str2177) + %t287 = load ptr, ptr %t221 + %t288 = getelementptr inbounds %Cmp_Val, ptr %t287, i32 0, i32 0 + %t289 = load ptr, ptr %t288 + %t290 = call ptr @fn_str_concat(ptr %t286, ptr %t289) + %t291 = call ptr @fn_emit_bind(ptr %t290) + store ptr %t291, ptr %t292 + %t293 = load ptr, ptr %t203 + %t294 = getelementptr inbounds %Cmp_Val, ptr %t293, i32 0, i32 0 + %t295 = load ptr, ptr %t294 + %t296 = call ptr @fn_str_concat(ptr @.str2178, ptr %t295) + %t297 = call ptr @fn_str_concat(ptr %t296, ptr @.str2179) + %t298 = load ptr, ptr %t261 + %t299 = call ptr @fn_str_concat(ptr %t297, ptr %t298) + %t300 = call ptr @fn_emit_bind(ptr %t299) + store ptr %t300, ptr %t301 + %t302 = load ptr, ptr %t272 + %t303 = call ptr @fn_str_concat(ptr @.str2180, ptr %t302) + %t304 = call ptr @fn_str_concat(ptr %t303, ptr @.str2181) + %t305 = load ptr, ptr %t281 + %t306 = call ptr @fn_str_concat(ptr %t304, ptr %t305) + %t307 = call ptr @fn_emit_bind(ptr %t306) + store ptr %t307, ptr %t308 + %t309 = load ptr, ptr %t292 + %t310 = call ptr @fn_str_concat(ptr @.str2182, ptr %t309) + %t311 = call ptr @fn_str_concat(ptr %t310, ptr @.str2183) + %t312 = load ptr, ptr %t301 + %t313 = call ptr @fn_str_concat(ptr %t311, ptr %t312) + %t314 = call ptr @fn_emit_bind(ptr %t313) + store ptr %t314, ptr %t315 + %t316 = load ptr, ptr %t308 + %t317 = call ptr @fn_str_concat(ptr @.str2184, ptr %t316) + %t318 = call ptr @fn_str_concat(ptr %t317, ptr @.str2185) + %t319 = load ptr, ptr %t315 + %t320 = call ptr @fn_str_concat(ptr %t318, ptr %t319) + %t321 = call ptr @fn_emit_bind(ptr %t320) + store ptr %t321, ptr %t322 + %t323 = load ptr, ptr %t322 + %t324 = call ptr @fn_str_concat(ptr @.str2186, ptr %t323) + %t325 = call ptr @fn_str_concat(ptr %t324, ptr @.str2187) + %t326 = call ptr @fn_emit_bind(ptr %t325) + %t327 = call ptr @fn_val(ptr %t326, ptr @.str2188) + store ptr %t327, ptr %retval + br label %ret +ifend5: + %t328 = load ptr, ptr %t0 + %t329 = call i32 @fn_str_eq(ptr %t328, ptr @.str2189) + %t330 = icmp ne i32 %t329, 0 + br i1 %t330, label %then6, label %ifend8 +then6: + %t331 = load ptr, ptr %t1 + %t332 = getelementptr inbounds %Cmp_Node, ptr %t331, i32 0, i32 7 + %t333 = load ptr, ptr %t332 + %t334 = getelementptr inbounds %LSlice, ptr %t333, i32 0, i32 0 + %t335 = load ptr, ptr %t334 + %t336 = getelementptr inbounds ptr, ptr %t335, i32 0 + %t337 = load ptr, ptr %t336 + %t338 = call ptr @fn_emit_expr(ptr %t337) + store ptr %t338, ptr %t339 + %t340 = load ptr, ptr %t1 + %t341 = getelementptr inbounds %Cmp_Node, ptr %t340, i32 0, i32 7 + %t342 = load ptr, ptr %t341 + %t343 = getelementptr inbounds %LSlice, ptr %t342, i32 0, i32 0 + %t344 = load ptr, ptr %t343 + %t345 = getelementptr inbounds ptr, ptr %t344, i32 1 + %t346 = load ptr, ptr %t345 + %t347 = call ptr @fn_emit_expr(ptr %t346) + store ptr %t347, ptr %t348 + %t349 = load ptr, ptr %t1 + %t350 = getelementptr inbounds %Cmp_Node, ptr %t349, i32 0, i32 7 + %t351 = load ptr, ptr %t350 + %t352 = getelementptr inbounds %LSlice, ptr %t351, i32 0, i32 0 + %t353 = load ptr, ptr %t352 + %t354 = getelementptr inbounds ptr, ptr %t353, i32 2 + %t355 = load ptr, ptr %t354 + %t356 = call ptr @fn_emit_expr(ptr %t355) + store ptr %t356, ptr %t357 + %t358 = load ptr, ptr %t1 + %t359 = getelementptr inbounds %Cmp_Node, ptr %t358, i32 0, i32 7 + %t360 = load ptr, ptr %t359 + %t361 = getelementptr inbounds %LSlice, ptr %t360, i32 0, i32 0 + %t362 = load ptr, ptr %t361 + %t363 = getelementptr inbounds ptr, ptr %t362, i32 3 + %t364 = load ptr, ptr %t363 + %t365 = call ptr @fn_emit_expr(ptr %t364) + store ptr %t365, ptr %t366 + %t367 = load ptr, ptr %t1 + %t368 = getelementptr inbounds %Cmp_Node, ptr %t367, i32 0, i32 7 + %t369 = load ptr, ptr %t368 + %t370 = getelementptr inbounds %LSlice, ptr %t369, i32 0, i32 0 + %t371 = load ptr, ptr %t370 + %t372 = getelementptr inbounds ptr, ptr %t371, i32 4 + %t373 = load ptr, ptr %t372 + %t374 = call ptr @fn_emit_expr(ptr %t373) + store ptr %t374, ptr %t375 + %t376 = load ptr, ptr %t1 + %t377 = getelementptr inbounds %Cmp_Node, ptr %t376, i32 0, i32 7 + %t378 = load ptr, ptr %t377 + %t379 = getelementptr inbounds %LSlice, ptr %t378, i32 0, i32 0 + %t380 = load ptr, ptr %t379 + %t381 = getelementptr inbounds ptr, ptr %t380, i32 5 + %t382 = load ptr, ptr %t381 + %t383 = call ptr @fn_emit_expr(ptr %t382) + store ptr %t383, ptr %t384 + %t385 = load ptr, ptr %t339 + %t386 = getelementptr inbounds %Cmp_Val, ptr %t385, i32 0, i32 0 + %t387 = load ptr, ptr %t386 + %t388 = call ptr @fn_str_concat(ptr @.str2190, ptr %t387) + %t389 = call ptr @fn_str_concat(ptr %t388, ptr @.str2191) + %t390 = load ptr, ptr %t366 + %t391 = getelementptr inbounds %Cmp_Val, ptr %t390, i32 0, i32 0 + %t392 = load ptr, ptr %t391 + %t393 = call ptr @fn_str_concat(ptr %t389, ptr %t392) + %t394 = call ptr @fn_emit_bind(ptr %t393) + store ptr %t394, ptr %t395 + %t396 = load ptr, ptr %t348 + %t397 = getelementptr inbounds %Cmp_Val, ptr %t396, i32 0, i32 0 + %t398 = load ptr, ptr %t397 + %t399 = call ptr @fn_str_concat(ptr @.str2192, ptr %t398) + %t400 = call ptr @fn_str_concat(ptr %t399, ptr @.str2193) + %t401 = load ptr, ptr %t375 + %t402 = getelementptr inbounds %Cmp_Val, ptr %t401, i32 0, i32 0 + %t403 = load ptr, ptr %t402 + %t404 = call ptr @fn_str_concat(ptr %t400, ptr %t403) + %t405 = call ptr @fn_emit_bind(ptr %t404) + store ptr %t405, ptr %t406 + %t407 = load ptr, ptr %t395 + %t408 = load ptr, ptr %t406 + %t409 = call ptr @fn_coll_sq_sum(ptr %t407, ptr %t408) + store ptr %t409, ptr %t410 + %t411 = load ptr, ptr %t357 + %t412 = getelementptr inbounds %Cmp_Val, ptr %t411, i32 0, i32 0 + %t413 = load ptr, ptr %t412 + %t414 = call ptr @fn_str_concat(ptr @.str2194, ptr %t413) + %t415 = call ptr @fn_str_concat(ptr %t414, ptr @.str2195) + %t416 = load ptr, ptr %t384 + %t417 = getelementptr inbounds %Cmp_Val, ptr %t416, i32 0, i32 0 + %t418 = load ptr, ptr %t417 + %t419 = call ptr @fn_str_concat(ptr %t415, ptr %t418) + %t420 = call ptr @fn_emit_bind(ptr %t419) + store ptr %t420, ptr %t421 + %t422 = load ptr, ptr %t421 + %t423 = call ptr @fn_str_concat(ptr @.str2196, ptr %t422) + %t424 = call ptr @fn_str_concat(ptr %t423, ptr @.str2197) + %t425 = call ptr @fn_emit_bind(ptr %t424) + store ptr %t425, ptr %t426 + %t427 = load ptr, ptr %t426 + %t428 = call ptr @fn_str_concat(ptr @.str2198, ptr %t427) + %t429 = call ptr @fn_str_concat(ptr %t428, ptr @.str2199) + %t430 = load ptr, ptr %t426 + %t431 = call ptr @fn_str_concat(ptr %t429, ptr %t430) + %t432 = call ptr @fn_emit_bind(ptr %t431) + store ptr %t432, ptr %t433 + %t434 = load ptr, ptr %t410 + %t435 = call ptr @fn_str_concat(ptr @.str2200, ptr %t434) + %t436 = call ptr @fn_str_concat(ptr %t435, ptr @.str2201) + %t437 = load ptr, ptr %t433 + %t438 = call ptr @fn_str_concat(ptr %t436, ptr %t437) + %t439 = call ptr @fn_emit_bind(ptr %t438) + store ptr %t439, ptr %t440 + %t441 = load ptr, ptr %t440 + %t442 = call ptr @fn_str_concat(ptr @.str2202, ptr %t441) + %t443 = call ptr @fn_str_concat(ptr %t442, ptr @.str2203) + %t444 = call ptr @fn_emit_bind(ptr %t443) + %t445 = call ptr @fn_val(ptr %t444, ptr @.str2204) + store ptr %t445, ptr %retval + br label %ret +ifend8: + %t446 = load ptr, ptr %t1 + %t447 = getelementptr inbounds %Cmp_Node, ptr %t446, i32 0, i32 7 + %t448 = load ptr, ptr %t447 + %t449 = getelementptr inbounds %LSlice, ptr %t448, i32 0, i32 0 + %t450 = load ptr, ptr %t449 + %t451 = getelementptr inbounds ptr, ptr %t450, i32 0 + %t452 = load ptr, ptr %t451 + %t453 = call ptr @fn_emit_expr(ptr %t452) + store ptr %t453, ptr %t454 + %t455 = load ptr, ptr %t1 + %t456 = getelementptr inbounds %Cmp_Node, ptr %t455, i32 0, i32 7 + %t457 = load ptr, ptr %t456 + %t458 = getelementptr inbounds %LSlice, ptr %t457, i32 0, i32 0 + %t459 = load ptr, ptr %t458 + %t460 = getelementptr inbounds ptr, ptr %t459, i32 1 + %t461 = load ptr, ptr %t460 + %t462 = call ptr @fn_emit_expr(ptr %t461) + store ptr %t462, ptr %t463 + %t464 = load ptr, ptr %t1 + %t465 = getelementptr inbounds %Cmp_Node, ptr %t464, i32 0, i32 7 + %t466 = load ptr, ptr %t465 + %t467 = getelementptr inbounds %LSlice, ptr %t466, i32 0, i32 0 + %t468 = load ptr, ptr %t467 + %t469 = getelementptr inbounds ptr, ptr %t468, i32 2 + %t470 = load ptr, ptr %t469 + %t471 = call ptr @fn_emit_expr(ptr %t470) + store ptr %t471, ptr %t472 + %t473 = load ptr, ptr %t1 + %t474 = getelementptr inbounds %Cmp_Node, ptr %t473, i32 0, i32 7 + %t475 = load ptr, ptr %t474 + %t476 = getelementptr inbounds %LSlice, ptr %t475, i32 0, i32 0 + %t477 = load ptr, ptr %t476 + %t478 = getelementptr inbounds ptr, ptr %t477, i32 3 + %t479 = load ptr, ptr %t478 + %t480 = call ptr @fn_emit_expr(ptr %t479) + store ptr %t480, ptr %t481 + %t482 = load ptr, ptr %t1 + %t483 = getelementptr inbounds %Cmp_Node, ptr %t482, i32 0, i32 7 + %t484 = load ptr, ptr %t483 + %t485 = getelementptr inbounds %LSlice, ptr %t484, i32 0, i32 0 + %t486 = load ptr, ptr %t485 + %t487 = getelementptr inbounds ptr, ptr %t486, i32 4 + %t488 = load ptr, ptr %t487 + %t489 = call ptr @fn_emit_expr(ptr %t488) + store ptr %t489, ptr %t490 + %t491 = load ptr, ptr %t1 + %t492 = getelementptr inbounds %Cmp_Node, ptr %t491, i32 0, i32 7 + %t493 = load ptr, ptr %t492 + %t494 = getelementptr inbounds %LSlice, ptr %t493, i32 0, i32 0 + %t495 = load ptr, ptr %t494 + %t496 = getelementptr inbounds ptr, ptr %t495, i32 5 + %t497 = load ptr, ptr %t496 + %t498 = call ptr @fn_emit_expr(ptr %t497) + store ptr %t498, ptr %t499 + %t500 = load ptr, ptr %t1 + %t501 = getelementptr inbounds %Cmp_Node, ptr %t500, i32 0, i32 7 + %t502 = load ptr, ptr %t501 + %t503 = getelementptr inbounds %LSlice, ptr %t502, i32 0, i32 0 + %t504 = load ptr, ptr %t503 + %t505 = getelementptr inbounds ptr, ptr %t504, i32 6 + %t506 = load ptr, ptr %t505 + %t507 = call ptr @fn_emit_expr(ptr %t506) + store ptr %t507, ptr %t508 + %t509 = load ptr, ptr %t454 + %t510 = getelementptr inbounds %Cmp_Val, ptr %t509, i32 0, i32 0 + %t511 = load ptr, ptr %t510 + %t512 = call ptr @fn_str_concat(ptr @.str2205, ptr %t511) + %t513 = call ptr @fn_str_concat(ptr %t512, ptr @.str2206) + %t514 = load ptr, ptr %t472 + %t515 = getelementptr inbounds %Cmp_Val, ptr %t514, i32 0, i32 0 + %t516 = load ptr, ptr %t515 + %t517 = call ptr @fn_str_concat(ptr %t513, ptr %t516) + %t518 = call ptr @fn_emit_bind(ptr %t517) + store ptr %t518, ptr %t519 + %t520 = load ptr, ptr %t463 + %t521 = getelementptr inbounds %Cmp_Val, ptr %t520, i32 0, i32 0 + %t522 = load ptr, ptr %t521 + %t523 = call ptr @fn_str_concat(ptr @.str2207, ptr %t522) + %t524 = call ptr @fn_str_concat(ptr %t523, ptr @.str2208) + %t525 = load ptr, ptr %t481 + %t526 = getelementptr inbounds %Cmp_Val, ptr %t525, i32 0, i32 0 + %t527 = load ptr, ptr %t526 + %t528 = call ptr @fn_str_concat(ptr %t524, ptr %t527) + %t529 = call ptr @fn_emit_bind(ptr %t528) + store ptr %t529, ptr %t530 + %t531 = load ptr, ptr %t490 + %t532 = getelementptr inbounds %Cmp_Val, ptr %t531, i32 0, i32 0 + %t533 = load ptr, ptr %t532 + %t534 = load ptr, ptr %t454 + %t535 = getelementptr inbounds %Cmp_Val, ptr %t534, i32 0, i32 0 + %t536 = load ptr, ptr %t535 + %t537 = load ptr, ptr %t519 + %t538 = call ptr @fn_coll_clamp(ptr %t533, ptr %t536, ptr %t537) + store ptr %t538, ptr %t539 + %t540 = load ptr, ptr %t499 + %t541 = getelementptr inbounds %Cmp_Val, ptr %t540, i32 0, i32 0 + %t542 = load ptr, ptr %t541 + %t543 = load ptr, ptr %t463 + %t544 = getelementptr inbounds %Cmp_Val, ptr %t543, i32 0, i32 0 + %t545 = load ptr, ptr %t544 + %t546 = load ptr, ptr %t530 + %t547 = call ptr @fn_coll_clamp(ptr %t542, ptr %t545, ptr %t546) + store ptr %t547, ptr %t548 + %t549 = load ptr, ptr %t490 + %t550 = getelementptr inbounds %Cmp_Val, ptr %t549, i32 0, i32 0 + %t551 = load ptr, ptr %t550 + %t552 = call ptr @fn_str_concat(ptr @.str2209, ptr %t551) + %t553 = call ptr @fn_str_concat(ptr %t552, ptr @.str2210) + %t554 = load ptr, ptr %t539 + %t555 = call ptr @fn_str_concat(ptr %t553, ptr %t554) + %t556 = call ptr @fn_emit_bind(ptr %t555) + store ptr %t556, ptr %t557 + %t558 = load ptr, ptr %t499 + %t559 = getelementptr inbounds %Cmp_Val, ptr %t558, i32 0, i32 0 + %t560 = load ptr, ptr %t559 + %t561 = call ptr @fn_str_concat(ptr @.str2211, ptr %t560) + %t562 = call ptr @fn_str_concat(ptr %t561, ptr @.str2212) + %t563 = load ptr, ptr %t548 + %t564 = call ptr @fn_str_concat(ptr %t562, ptr %t563) + %t565 = call ptr @fn_emit_bind(ptr %t564) + store ptr %t565, ptr %t566 + %t567 = load ptr, ptr %t557 + %t568 = load ptr, ptr %t566 + %t569 = call ptr @fn_coll_sq_sum(ptr %t567, ptr %t568) + store ptr %t569, ptr %t570 + %t571 = load ptr, ptr %t508 + %t572 = getelementptr inbounds %Cmp_Val, ptr %t571, i32 0, i32 0 + %t573 = load ptr, ptr %t572 + %t574 = call ptr @fn_str_concat(ptr @.str2213, ptr %t573) + %t575 = call ptr @fn_str_concat(ptr %t574, ptr @.str2214) + %t576 = call ptr @fn_emit_bind(ptr %t575) + store ptr %t576, ptr %t577 + %t578 = load ptr, ptr %t577 + %t579 = call ptr @fn_str_concat(ptr @.str2215, ptr %t578) + %t580 = call ptr @fn_str_concat(ptr %t579, ptr @.str2216) + %t581 = load ptr, ptr %t577 + %t582 = call ptr @fn_str_concat(ptr %t580, ptr %t581) + %t583 = call ptr @fn_emit_bind(ptr %t582) + store ptr %t583, ptr %t584 + %t585 = load ptr, ptr %t570 + %t586 = call ptr @fn_str_concat(ptr @.str2217, ptr %t585) + %t587 = call ptr @fn_str_concat(ptr %t586, ptr @.str2218) + %t588 = load ptr, ptr %t584 + %t589 = call ptr @fn_str_concat(ptr %t587, ptr %t588) + %t590 = call ptr @fn_emit_bind(ptr %t589) + store ptr %t590, ptr %t591 + %t592 = load ptr, ptr %t591 + %t593 = call ptr @fn_str_concat(ptr @.str2219, ptr %t592) + %t594 = call ptr @fn_str_concat(ptr %t593, ptr @.str2220) + %t595 = call ptr @fn_emit_bind(ptr %t594) + %t596 = call ptr @fn_val(ptr %t595, ptr @.str2221) + store ptr %t596, ptr %retval br label %ret ret: - %t173 = load ptr, ptr %retval - ret ptr %t173 + %t597 = load ptr, ptr %retval + ret ptr %t597 +} + +define i32 @fn_is_mem_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t12 = alloca i32 + %t13 = alloca i32 + %t14 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2222) + %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_str_eq(ptr %t6, ptr @.str2223) + %t8 = icmp ne i32 %t7, 0 + %t9 = zext i1 %t8 to i32 + store i32 %t9, ptr %t1 + br label %scend1 +scend1: + %t10 = load i32, ptr %t1 + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then2, label %ifend4 +then2: + store i32 1, ptr %retval + br label %ret +ifend4: + %t15 = load ptr, ptr %t0 + %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str2224) + %t17 = icmp ne i32 %t16, 0 + %t18 = zext i1 %t17 to i32 + store i32 %t18, ptr %t14 + br i1 %t17, label %scend6, label %sc5 +sc5: + %t19 = load ptr, ptr %t0 + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str2225) + %t21 = icmp ne i32 %t20, 0 + %t22 = zext i1 %t21 to i32 + store i32 %t22, ptr %t14 + br label %scend6 +scend6: + %t23 = load i32, ptr %t14 + %t24 = icmp ne i32 %t23, 0 + %t25 = zext i1 %t24 to i32 + store i32 %t25, ptr %t13 + br i1 %t24, label %scend8, label %sc7 +sc7: + %t26 = load ptr, ptr %t0 + %t27 = call i32 @fn_str_eq(ptr %t26, ptr @.str2226) + %t28 = icmp ne i32 %t27, 0 + %t29 = zext i1 %t28 to i32 + store i32 %t29, ptr %t13 + br label %scend8 +scend8: + %t30 = load i32, ptr %t13 + %t31 = icmp ne i32 %t30, 0 + %t32 = zext i1 %t31 to i32 + store i32 %t32, ptr %t12 + br i1 %t31, label %scend10, label %sc9 +sc9: + %t33 = load ptr, ptr %t0 + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str2227) + %t35 = icmp ne i32 %t34, 0 + %t36 = zext i1 %t35 to i32 + store i32 %t36, ptr %t12 + br label %scend10 +scend10: + %t37 = load i32, ptr %t12 + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then11, label %ifend13 +then11: + store i32 1, ptr %retval + br label %ret +ifend13: + store i32 0, ptr %retval + br label %ret +ret: + %t39 = load i32, ptr %retval + ret i32 %t39 +} + +define ptr @fn_emit_mem_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t13 = alloca ptr + %t20 = alloca ptr + %t37 = alloca ptr + %t44 = alloca ptr + %t49 = alloca ptr + %t66 = alloca ptr + %t75 = alloca ptr + %t84 = alloca ptr + %t91 = alloca ptr + %t111 = alloca ptr + %t120 = alloca ptr + %t129 = alloca ptr + %t136 = alloca ptr + %t156 = alloca ptr + %t165 = alloca ptr + %t176 = alloca ptr + %t180 = alloca ptr + %t194 = alloca ptr + %t203 = alloca ptr + %t212 = alloca ptr + %t223 = alloca ptr + %t230 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2228) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = load ptr, ptr %t1 + %t6 = getelementptr inbounds %Cmp_Node, ptr %t5, i32 0, i32 7 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 0 + %t9 = load ptr, ptr %t8 + %t10 = getelementptr inbounds ptr, ptr %t9, i32 0 + %t11 = load ptr, ptr %t10 + %t12 = call ptr @fn_emit_expr(ptr %t11) + store ptr %t12, ptr %t13 + %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_str_concat(ptr @.str2229, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str2230) + %t19 = call ptr @fn_emit_bind(ptr %t18) + store ptr %t19, ptr %t20 + %t21 = load ptr, ptr %t20 + %t22 = call ptr @fn_str_concat(ptr @.str2231, ptr %t21) + %t23 = call ptr @fn_str_concat(ptr %t22, ptr @.str2232) + %t24 = call ptr @fn_emit_bind(ptr %t23) + %t25 = call ptr @fn_val(ptr %t24, ptr @.str2233) + store ptr %t25, ptr %retval + br label %ret +ifend2: + %t26 = load ptr, ptr %t0 + %t27 = call i32 @fn_str_eq(ptr %t26, ptr @.str2234) + %t28 = icmp ne i32 %t27, 0 + br i1 %t28, label %then3, label %ifend5 +then3: + %t29 = load ptr, ptr %t1 + %t30 = getelementptr inbounds %Cmp_Node, ptr %t29, i32 0, i32 7 + %t31 = load ptr, ptr %t30 + %t32 = getelementptr inbounds %LSlice, ptr %t31, i32 0, i32 0 + %t33 = load ptr, ptr %t32 + %t34 = getelementptr inbounds ptr, ptr %t33, i32 0 + %t35 = load ptr, ptr %t34 + %t36 = call ptr @fn_emit_expr(ptr %t35) + store ptr %t36, ptr %t37 + %t38 = load ptr, ptr %t37 + %t39 = getelementptr inbounds %Cmp_Val, ptr %t38, i32 0, i32 0 + %t40 = load ptr, ptr %t39 + %t41 = call ptr @fn_str_concat(ptr @.str2235, ptr %t40) + %t42 = call ptr @fn_str_concat(ptr %t41, ptr @.str2236) + %t43 = call ptr @fn_emit_bind(ptr %t42) + store ptr %t43, ptr %t44 + %t45 = load ptr, ptr %t44 + %t46 = call ptr @fn_str_concat(ptr @.str2237, ptr %t45) + %t47 = call ptr @fn_str_concat(ptr %t46, ptr @.str2238) + %t48 = call ptr @fn_emit_bind(ptr %t47) + store ptr %t48, ptr %t49 + %t50 = load ptr, ptr %t49 + %t51 = call ptr @fn_str_concat(ptr @.str2239, ptr %t50) + %t52 = call ptr @fn_str_concat(ptr %t51, ptr @.str2240) + %t53 = call ptr @fn_emit_bind(ptr %t52) + %t54 = call ptr @fn_val(ptr %t53, ptr @.str2241) + store ptr %t54, ptr %retval + br label %ret +ifend5: + %t55 = load ptr, ptr %t0 + %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str2242) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %then6, label %ifend8 +then6: + %t58 = load ptr, ptr %t1 + %t59 = getelementptr inbounds %Cmp_Node, ptr %t58, i32 0, i32 7 + %t60 = load ptr, ptr %t59 + %t61 = getelementptr inbounds %LSlice, ptr %t60, i32 0, i32 0 + %t62 = load ptr, ptr %t61 + %t63 = getelementptr inbounds ptr, ptr %t62, i32 0 + %t64 = load ptr, ptr %t63 + %t65 = call ptr @fn_emit_expr(ptr %t64) + store ptr %t65, ptr %t66 + %t67 = load ptr, ptr %t1 + %t68 = getelementptr inbounds %Cmp_Node, ptr %t67, i32 0, i32 7 + %t69 = load ptr, ptr %t68 + %t70 = getelementptr inbounds %LSlice, ptr %t69, i32 0, i32 0 + %t71 = load ptr, ptr %t70 + %t72 = getelementptr inbounds ptr, ptr %t71, i32 1 + %t73 = load ptr, ptr %t72 + %t74 = call ptr @fn_emit_expr(ptr %t73) + store ptr %t74, ptr %t75 + %t76 = load ptr, ptr %t1 + %t77 = getelementptr inbounds %Cmp_Node, ptr %t76, i32 0, i32 7 + %t78 = load ptr, ptr %t77 + %t79 = getelementptr inbounds %LSlice, ptr %t78, i32 0, i32 0 + %t80 = load ptr, ptr %t79 + %t81 = getelementptr inbounds ptr, ptr %t80, i32 2 + %t82 = load ptr, ptr %t81 + %t83 = call ptr @fn_emit_expr(ptr %t82) + store ptr %t83, ptr %t84 + %t85 = load ptr, ptr %t84 + %t86 = getelementptr inbounds %Cmp_Val, ptr %t85, i32 0, i32 0 + %t87 = load ptr, ptr %t86 + %t88 = call ptr @fn_str_concat(ptr @.str2243, ptr %t87) + %t89 = call ptr @fn_str_concat(ptr %t88, ptr @.str2244) + %t90 = call ptr @fn_emit_bind(ptr %t89) + store ptr %t90, ptr %t91 + call void @fn_emit(ptr @.str2245) + %t92 = load ptr, ptr %t66 + %t93 = getelementptr inbounds %Cmp_Val, ptr %t92, i32 0, i32 0 + %t94 = load ptr, ptr %t93 + call void @fn_emit(ptr %t94) + call void @fn_emit(ptr @.str2246) + %t95 = load ptr, ptr %t75 + %t96 = getelementptr inbounds %Cmp_Val, ptr %t95, i32 0, i32 0 + %t97 = load ptr, ptr %t96 + call void @fn_emit(ptr %t97) + call void @fn_emit(ptr @.str2247) + %t98 = load ptr, ptr %t91 + call void @fn_emit(ptr %t98) + call void @fn_emit(ptr @.str2248) + %t99 = call ptr @fn_val(ptr @.str2249, ptr @.str2250) + store ptr %t99, ptr %retval + br label %ret +ifend8: + %t100 = load ptr, ptr %t0 + %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str2251) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then9, label %ifend11 +then9: + %t103 = load ptr, ptr %t1 + %t104 = getelementptr inbounds %Cmp_Node, ptr %t103, i32 0, i32 7 + %t105 = load ptr, ptr %t104 + %t106 = getelementptr inbounds %LSlice, ptr %t105, i32 0, i32 0 + %t107 = load ptr, ptr %t106 + %t108 = getelementptr inbounds ptr, ptr %t107, i32 0 + %t109 = load ptr, ptr %t108 + %t110 = call ptr @fn_emit_expr(ptr %t109) + store ptr %t110, ptr %t111 + %t112 = load ptr, ptr %t1 + %t113 = getelementptr inbounds %Cmp_Node, ptr %t112, i32 0, i32 7 + %t114 = load ptr, ptr %t113 + %t115 = getelementptr inbounds %LSlice, ptr %t114, i32 0, i32 0 + %t116 = load ptr, ptr %t115 + %t117 = getelementptr inbounds ptr, ptr %t116, i32 1 + %t118 = load ptr, ptr %t117 + %t119 = call ptr @fn_emit_expr(ptr %t118) + store ptr %t119, ptr %t120 + %t121 = load ptr, ptr %t1 + %t122 = getelementptr inbounds %Cmp_Node, ptr %t121, i32 0, i32 7 + %t123 = load ptr, ptr %t122 + %t124 = getelementptr inbounds %LSlice, ptr %t123, i32 0, i32 0 + %t125 = load ptr, ptr %t124 + %t126 = getelementptr inbounds ptr, ptr %t125, i32 2 + %t127 = load ptr, ptr %t126 + %t128 = call ptr @fn_emit_expr(ptr %t127) + store ptr %t128, ptr %t129 + %t130 = load ptr, ptr %t129 + %t131 = getelementptr inbounds %Cmp_Val, ptr %t130, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + %t133 = call ptr @fn_str_concat(ptr @.str2252, ptr %t132) + %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str2253) + %t135 = call ptr @fn_emit_bind(ptr %t134) + store ptr %t135, ptr %t136 + call void @fn_emit(ptr @.str2254) + %t137 = load ptr, ptr %t111 + %t138 = getelementptr inbounds %Cmp_Val, ptr %t137, i32 0, i32 0 + %t139 = load ptr, ptr %t138 + call void @fn_emit(ptr %t139) + call void @fn_emit(ptr @.str2255) + %t140 = load ptr, ptr %t120 + %t141 = getelementptr inbounds %Cmp_Val, ptr %t140, i32 0, i32 0 + %t142 = load ptr, ptr %t141 + call void @fn_emit(ptr %t142) + call void @fn_emit(ptr @.str2256) + %t143 = load ptr, ptr %t136 + call void @fn_emit(ptr %t143) + call void @fn_emit(ptr @.str2257) + %t144 = call ptr @fn_val(ptr @.str2258, ptr @.str2259) + store ptr %t144, ptr %retval + br label %ret +ifend11: + %t145 = load ptr, ptr %t0 + %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str2260) + %t147 = icmp ne i32 %t146, 0 + br i1 %t147, label %then12, label %ifend14 +then12: + %t148 = load ptr, ptr %t1 + %t149 = getelementptr inbounds %Cmp_Node, ptr %t148, i32 0, i32 7 + %t150 = load ptr, ptr %t149 + %t151 = getelementptr inbounds %LSlice, ptr %t150, i32 0, i32 0 + %t152 = load ptr, ptr %t151 + %t153 = getelementptr inbounds ptr, ptr %t152, i32 0 + %t154 = load ptr, ptr %t153 + %t155 = call ptr @fn_emit_expr(ptr %t154) + store ptr %t155, ptr %t156 + %t157 = load ptr, ptr %t1 + %t158 = getelementptr inbounds %Cmp_Node, ptr %t157, i32 0, i32 7 + %t159 = load ptr, ptr %t158 + %t160 = getelementptr inbounds %LSlice, ptr %t159, i32 0, i32 0 + %t161 = load ptr, ptr %t160 + %t162 = getelementptr inbounds ptr, ptr %t161, i32 1 + %t163 = load ptr, ptr %t162 + %t164 = call ptr @fn_emit_expr(ptr %t163) + store ptr %t164, ptr %t165 + %t166 = load ptr, ptr %t156 + %t167 = getelementptr inbounds %Cmp_Val, ptr %t166, i32 0, i32 0 + %t168 = load ptr, ptr %t167 + %t169 = call ptr @fn_str_concat(ptr @.str2261, ptr %t168) + %t170 = call ptr @fn_str_concat(ptr %t169, ptr @.str2262) + %t171 = load ptr, ptr %t165 + %t172 = getelementptr inbounds %Cmp_Val, ptr %t171, i32 0, i32 0 + %t173 = load ptr, ptr %t172 + %t174 = call ptr @fn_str_concat(ptr %t170, ptr %t173) + %t175 = call ptr @fn_emit_bind(ptr %t174) + store ptr %t175, ptr %t176 + %t177 = load ptr, ptr %t176 + %t178 = call ptr @fn_str_concat(ptr @.str2263, ptr %t177) + %t179 = call ptr @fn_emit_bind(ptr %t178) + store ptr %t179, ptr %t180 + %t181 = load ptr, ptr %t180 + %t182 = call ptr @fn_str_concat(ptr @.str2264, ptr %t181) + %t183 = call ptr @fn_str_concat(ptr %t182, ptr @.str2265) + %t184 = call ptr @fn_emit_bind(ptr %t183) + %t185 = call ptr @fn_val(ptr %t184, ptr @.str2266) + store ptr %t185, ptr %retval + br label %ret +ifend14: + %t186 = load ptr, ptr %t1 + %t187 = getelementptr inbounds %Cmp_Node, ptr %t186, i32 0, i32 7 + %t188 = load ptr, ptr %t187 + %t189 = getelementptr inbounds %LSlice, ptr %t188, i32 0, i32 0 + %t190 = load ptr, ptr %t189 + %t191 = getelementptr inbounds ptr, ptr %t190, i32 0 + %t192 = load ptr, ptr %t191 + %t193 = call ptr @fn_emit_expr(ptr %t192) + store ptr %t193, ptr %t194 + %t195 = load ptr, ptr %t1 + %t196 = getelementptr inbounds %Cmp_Node, ptr %t195, i32 0, i32 7 + %t197 = load ptr, ptr %t196 + %t198 = getelementptr inbounds %LSlice, ptr %t197, i32 0, i32 0 + %t199 = load ptr, ptr %t198 + %t200 = getelementptr inbounds ptr, ptr %t199, i32 1 + %t201 = load ptr, ptr %t200 + %t202 = call ptr @fn_emit_expr(ptr %t201) + store ptr %t202, ptr %t203 + %t204 = load ptr, ptr %t1 + %t205 = getelementptr inbounds %Cmp_Node, ptr %t204, i32 0, i32 7 + %t206 = load ptr, ptr %t205 + %t207 = getelementptr inbounds %LSlice, ptr %t206, i32 0, i32 0 + %t208 = load ptr, ptr %t207 + %t209 = getelementptr inbounds ptr, ptr %t208, i32 2 + %t210 = load ptr, ptr %t209 + %t211 = call ptr @fn_emit_expr(ptr %t210) + store ptr %t211, ptr %t212 + %t213 = load ptr, ptr %t194 + %t214 = getelementptr inbounds %Cmp_Val, ptr %t213, i32 0, i32 0 + %t215 = load ptr, ptr %t214 + %t216 = call ptr @fn_str_concat(ptr @.str2267, ptr %t215) + %t217 = call ptr @fn_str_concat(ptr %t216, ptr @.str2268) + %t218 = load ptr, ptr %t203 + %t219 = getelementptr inbounds %Cmp_Val, ptr %t218, i32 0, i32 0 + %t220 = load ptr, ptr %t219 + %t221 = call ptr @fn_str_concat(ptr %t217, ptr %t220) + %t222 = call ptr @fn_emit_bind(ptr %t221) + store ptr %t222, ptr %t223 + %t224 = load ptr, ptr %t212 + %t225 = getelementptr inbounds %Cmp_Val, ptr %t224, i32 0, i32 0 + %t226 = load ptr, ptr %t225 + %t227 = call ptr @fn_str_concat(ptr @.str2269, ptr %t226) + %t228 = call ptr @fn_str_concat(ptr %t227, ptr @.str2270) + %t229 = call ptr @fn_emit_bind(ptr %t228) + store ptr %t229, ptr %t230 + call void @fn_emit(ptr @.str2271) + %t231 = load ptr, ptr %t230 + call void @fn_emit(ptr %t231) + call void @fn_emit(ptr @.str2272) + %t232 = load ptr, ptr %t223 + call void @fn_emit(ptr %t232) + call void @fn_emit(ptr @.str2273) + %t233 = call ptr @fn_val(ptr @.str2274, ptr @.str2275) + store ptr %t233, ptr %retval + br label %ret +ret: + %t234 = load ptr, ptr %retval + ret ptr %t234 +} + +define i32 @fn_is_time_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t3 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t4 = load ptr, ptr %t0 + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str2276) + %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_str_eq(ptr %t8, ptr @.str2277) + %t10 = icmp ne i32 %t9, 0 + %t11 = zext i1 %t10 to i32 + store i32 %t11, ptr %t3 + br label %scend1 +scend1: + %t12 = load i32, ptr %t3 + %t13 = icmp ne i32 %t12, 0 + %t14 = zext i1 %t13 to i32 + store i32 %t14, ptr %t2 + br i1 %t13, label %scend3, label %sc2 +sc2: + %t15 = load ptr, ptr %t0 + %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str2278) + %t17 = icmp ne i32 %t16, 0 + %t18 = zext i1 %t17 to i32 + store i32 %t18, ptr %t2 + br label %scend3 +scend3: + %t19 = load i32, ptr %t2 + %t20 = icmp ne i32 %t19, 0 + %t21 = zext i1 %t20 to i32 + store i32 %t21, ptr %t1 + br i1 %t20, label %scend5, label %sc4 +sc4: + %t22 = load ptr, ptr %t0 + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str2279) + %t24 = icmp ne i32 %t23, 0 + %t25 = zext i1 %t24 to i32 + store i32 %t25, ptr %t1 + br label %scend5 +scend5: + %t26 = load i32, ptr %t1 + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then6, label %ifend8 +then6: + store i32 1, ptr %retval + br label %ret +ifend8: + store i32 0, ptr %retval + br label %ret +ret: + %t28 = load i32, ptr %retval + ret i32 %t28 +} + +define ptr @fn_emit_time_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t15 = alloca ptr + %t22 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2280) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = call ptr @fn_emit_bind(ptr @.str2281) + %t6 = call ptr @fn_val(ptr %t5, ptr @.str2282) + store ptr %t6, ptr %retval + br label %ret +ifend2: + %t7 = load ptr, ptr %t0 + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str2283) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then3, label %ifend5 +then3: + %t10 = call ptr @fn_val(ptr @.str2284, ptr @.str2285) + store ptr %t10, ptr %retval + br label %ret +ifend5: + %t11 = load ptr, ptr %t0 + %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str2286) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then6, label %ifend8 +then6: + %t14 = call ptr @fn_emit_bind(ptr @.str2287) + store ptr %t14, ptr %t15 + %t16 = load ptr, ptr %t15 + %t17 = call ptr @fn_str_concat(ptr @.str2288, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str2289) + %t19 = call ptr @fn_emit_bind(ptr %t18) + %t20 = call ptr @fn_val(ptr %t19, ptr @.str2290) + store ptr %t20, ptr %retval + br label %ret +ifend8: + %t21 = call ptr @fn_emit_bind(ptr @.str2291) + store ptr %t21, ptr %t22 + %t23 = load ptr, ptr %t22 + %t24 = call ptr @fn_str_concat(ptr @.str2292, ptr %t23) + %t25 = call ptr @fn_str_concat(ptr %t24, ptr @.str2293) + %t26 = call ptr @fn_emit_bind(ptr %t25) + %t27 = call ptr @fn_val(ptr %t26, ptr @.str2294) + store ptr %t27, ptr %retval + br label %ret +ret: + %t28 = load ptr, ptr %retval + ret ptr %t28 +} + +define i32 @fn_is_colorfn_ns(ptr %arg_meth) { +entry: + %retval = alloca i32 + %t0 = alloca ptr + %t1 = alloca i32 + %t2 = alloca i32 + %t20 = alloca i32 + %t21 = alloca i32 + store ptr %arg_meth, ptr %t0 + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2295) + %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_str_eq(ptr %t7, ptr @.str2296) + %t9 = icmp ne i32 %t8, 0 + %t10 = zext i1 %t9 to i32 + store i32 %t10, ptr %t2 + br label %scend1 +scend1: + %t11 = load i32, ptr %t2 + %t12 = icmp ne i32 %t11, 0 + %t13 = zext i1 %t12 to i32 + store i32 %t13, ptr %t1 + br i1 %t12, label %scend3, label %sc2 +sc2: + %t14 = load ptr, ptr %t0 + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str2297) + %t16 = icmp ne i32 %t15, 0 + %t17 = zext i1 %t16 to i32 + store i32 %t17, ptr %t1 + br label %scend3 +scend3: + %t18 = load i32, ptr %t1 + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then4, label %ifend6 +then4: + store i32 1, ptr %retval + br label %ret +ifend6: + %t22 = load ptr, ptr %t0 + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str2298) + %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_str_eq(ptr %t26, ptr @.str2299) + %t28 = icmp ne i32 %t27, 0 + %t29 = zext i1 %t28 to i32 + store i32 %t29, ptr %t21 + br label %scend8 +scend8: + %t30 = load i32, ptr %t21 + %t31 = icmp ne i32 %t30, 0 + %t32 = zext i1 %t31 to i32 + store i32 %t32, ptr %t20 + br i1 %t31, label %scend10, label %sc9 +sc9: + %t33 = load ptr, ptr %t0 + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str2300) + %t35 = icmp ne i32 %t34, 0 + %t36 = zext i1 %t35 to i32 + store i32 %t36, ptr %t20 + br label %scend10 +scend10: + %t37 = load i32, ptr %t20 + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then11, label %ifend13 +then11: + store i32 1, ptr %retval + br label %ret +ifend13: + store i32 0, ptr %retval + br label %ret +ret: + %t39 = load i32, ptr %retval + ret i32 %t39 +} + +define ptr @fn_color_ch(ptr %arg_c, ptr %arg_shift) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t8 = alloca ptr + store ptr %arg_c, ptr %t0 + store ptr %arg_shift, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call ptr @fn_str_concat(ptr @.str2301, ptr %t2) + %t4 = call ptr @fn_str_concat(ptr %t3, ptr @.str2302) + %t5 = load ptr, ptr %t1 + %t6 = call ptr @fn_str_concat(ptr %t4, ptr %t5) + %t7 = call ptr @fn_emit_bind(ptr %t6) + store ptr %t7, ptr %t8 + %t9 = load ptr, ptr %t8 + %t10 = call ptr @fn_str_concat(ptr @.str2303, ptr %t9) + %t11 = call ptr @fn_str_concat(ptr %t10, ptr @.str2304) + %t12 = call ptr @fn_emit_bind(ptr %t11) + store ptr %t12, ptr %retval + br label %ret +ret: + %t13 = load ptr, ptr %retval + ret ptr %t13 +} + +define ptr @fn_color_pack(ptr %arg_r, ptr %arg_g, ptr %arg_b) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t7 = alloca ptr + %t12 = alloca ptr + %t19 = alloca ptr + store ptr %arg_r, ptr %t0 + store ptr %arg_g, ptr %t1 + store ptr %arg_b, ptr %t2 + %t3 = load ptr, ptr %t0 + %t4 = call ptr @fn_str_concat(ptr @.str2305, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str2306) + %t6 = call ptr @fn_emit_bind(ptr %t5) + store ptr %t6, ptr %t7 + %t8 = load ptr, ptr %t1 + %t9 = call ptr @fn_str_concat(ptr @.str2307, ptr %t8) + %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str2308) + %t11 = call ptr @fn_emit_bind(ptr %t10) + store ptr %t11, ptr %t12 + %t13 = load ptr, ptr %t7 + %t14 = call ptr @fn_str_concat(ptr @.str2309, ptr %t13) + %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str2310) + %t16 = load ptr, ptr %t12 + %t17 = call ptr @fn_str_concat(ptr %t15, ptr %t16) + %t18 = call ptr @fn_emit_bind(ptr %t17) + store ptr %t18, ptr %t19 + %t20 = load ptr, ptr %t19 + %t21 = call ptr @fn_str_concat(ptr @.str2311, ptr %t20) + %t22 = call ptr @fn_str_concat(ptr %t21, ptr @.str2312) + %t23 = load ptr, ptr %t2 + %t24 = call ptr @fn_str_concat(ptr %t22, ptr %t23) + %t25 = call ptr @fn_emit_bind(ptr %t24) + store ptr %t25, ptr %retval + br label %ret +ret: + %t26 = load ptr, ptr %retval + ret ptr %t26 +} + +define ptr @fn_color_lerp_ch(ptr %arg_ch0, ptr %arg_ch1, ptr %arg_t) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t9 = alloca ptr + %t16 = alloca ptr + %t21 = alloca ptr + store ptr %arg_ch0, ptr %t0 + store ptr %arg_ch1, ptr %t1 + store ptr %arg_t, ptr %t2 + %t3 = load ptr, ptr %t1 + %t4 = call ptr @fn_str_concat(ptr @.str2313, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str2314) + %t6 = load ptr, ptr %t0 + %t7 = call ptr @fn_str_concat(ptr %t5, ptr %t6) + %t8 = call ptr @fn_emit_bind(ptr %t7) + store ptr %t8, ptr %t9 + %t10 = load ptr, ptr %t9 + %t11 = call ptr @fn_str_concat(ptr @.str2315, ptr %t10) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str2316) + %t13 = load ptr, ptr %t2 + %t14 = call ptr @fn_str_concat(ptr %t12, ptr %t13) + %t15 = call ptr @fn_emit_bind(ptr %t14) + store ptr %t15, ptr %t16 + %t17 = load ptr, ptr %t16 + %t18 = call ptr @fn_str_concat(ptr @.str2317, ptr %t17) + %t19 = call ptr @fn_str_concat(ptr %t18, ptr @.str2318) + %t20 = call ptr @fn_emit_bind(ptr %t19) + store ptr %t20, ptr %t21 + %t22 = load ptr, ptr %t0 + %t23 = call ptr @fn_str_concat(ptr @.str2319, ptr %t22) + %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str2320) + %t25 = load ptr, ptr %t21 + %t26 = call ptr @fn_str_concat(ptr %t24, ptr %t25) + %t27 = call ptr @fn_emit_bind(ptr %t26) + store ptr %t27, ptr %retval + br label %ret +ret: + %t28 = load ptr, ptr %retval + ret ptr %t28 +} + +define ptr @fn_emit_colorfn_ns(ptr %arg_meth, ptr %arg_e) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t13 = alloca ptr + %t22 = alloca ptr + %t31 = alloca ptr + %t54 = alloca ptr + %t63 = alloca ptr + %t72 = alloca ptr + %t81 = alloca ptr + %t92 = alloca ptr + %t99 = alloca ptr + %t118 = alloca ptr + %t127 = alloca ptr + %t134 = alloca ptr + %t141 = alloca ptr + %t160 = alloca ptr + %t169 = alloca ptr + %t178 = alloca ptr + %t191 = alloca ptr + %t204 = alloca ptr + %t217 = alloca ptr + %t234 = alloca ptr + %t243 = alloca ptr + %t249 = alloca ptr + %t254 = alloca ptr + %t259 = alloca ptr + %t264 = alloca ptr + %t271 = alloca ptr + %t276 = alloca ptr + %t283 = alloca ptr + %t288 = alloca ptr + %t295 = alloca ptr + %t300 = alloca ptr + %t314 = alloca ptr + %t323 = alloca ptr + %t328 = alloca ptr + %t333 = alloca ptr + %t338 = alloca ptr + %t342 = alloca ptr + %t351 = alloca ptr + %t356 = alloca ptr + %t363 = alloca ptr + %t367 = alloca ptr + %t376 = alloca ptr + %t381 = alloca ptr + %t388 = alloca ptr + %t392 = alloca ptr + %t401 = alloca ptr + %t406 = alloca ptr + %t413 = alloca ptr + store ptr %arg_meth, ptr %t0 + store ptr %arg_e, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2321) + %t4 = icmp ne i32 %t3, 0 + br i1 %t4, label %then0, label %ifend2 +then0: + %t5 = load ptr, ptr %t1 + %t6 = getelementptr inbounds %Cmp_Node, ptr %t5, i32 0, i32 7 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 0 + %t9 = load ptr, ptr %t8 + %t10 = getelementptr inbounds ptr, ptr %t9, i32 0 + %t11 = load ptr, ptr %t10 + %t12 = call ptr @fn_emit_expr(ptr %t11) + store ptr %t12, ptr %t13 + %t14 = load ptr, ptr %t1 + %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 7 + %t16 = load ptr, ptr %t15 + %t17 = getelementptr inbounds %LSlice, ptr %t16, i32 0, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = getelementptr inbounds ptr, ptr %t18, i32 1 + %t20 = load ptr, ptr %t19 + %t21 = call ptr @fn_emit_expr(ptr %t20) + store ptr %t21, ptr %t22 + %t23 = load ptr, ptr %t1 + %t24 = getelementptr inbounds %Cmp_Node, ptr %t23, i32 0, i32 7 + %t25 = load ptr, ptr %t24 + %t26 = getelementptr inbounds %LSlice, ptr %t25, i32 0, i32 0 + %t27 = load ptr, ptr %t26 + %t28 = getelementptr inbounds ptr, ptr %t27, i32 2 + %t29 = load ptr, ptr %t28 + %t30 = call ptr @fn_emit_expr(ptr %t29) + store ptr %t30, ptr %t31 + %t32 = load ptr, ptr %t13 + %t33 = getelementptr inbounds %Cmp_Val, ptr %t32, i32 0, i32 0 + %t34 = load ptr, ptr %t33 + %t35 = load ptr, ptr %t22 + %t36 = getelementptr inbounds %Cmp_Val, ptr %t35, i32 0, i32 0 + %t37 = load ptr, ptr %t36 + %t38 = load ptr, ptr %t31 + %t39 = getelementptr inbounds %Cmp_Val, ptr %t38, i32 0, i32 0 + %t40 = load ptr, ptr %t39 + %t41 = call ptr @fn_color_pack(ptr %t34, ptr %t37, ptr %t40) + %t42 = call ptr @fn_val(ptr %t41, ptr @.str2322) + store ptr %t42, ptr %retval + br label %ret +ifend2: + %t43 = load ptr, ptr %t0 + %t44 = call i32 @fn_str_eq(ptr %t43, ptr @.str2323) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then3, label %ifend5 +then3: + %t46 = load ptr, ptr %t1 + %t47 = getelementptr inbounds %Cmp_Node, ptr %t46, i32 0, i32 7 + %t48 = load ptr, ptr %t47 + %t49 = getelementptr inbounds %LSlice, ptr %t48, i32 0, i32 0 + %t50 = load ptr, ptr %t49 + %t51 = getelementptr inbounds ptr, ptr %t50, i32 0 + %t52 = load ptr, ptr %t51 + %t53 = call ptr @fn_emit_expr(ptr %t52) + store ptr %t53, ptr %t54 + %t55 = load ptr, ptr %t1 + %t56 = getelementptr inbounds %Cmp_Node, ptr %t55, i32 0, i32 7 + %t57 = load ptr, ptr %t56 + %t58 = getelementptr inbounds %LSlice, ptr %t57, i32 0, i32 0 + %t59 = load ptr, ptr %t58 + %t60 = getelementptr inbounds ptr, ptr %t59, i32 1 + %t61 = load ptr, ptr %t60 + %t62 = call ptr @fn_emit_expr(ptr %t61) + store ptr %t62, ptr %t63 + %t64 = load ptr, ptr %t1 + %t65 = getelementptr inbounds %Cmp_Node, ptr %t64, i32 0, i32 7 + %t66 = load ptr, ptr %t65 + %t67 = getelementptr inbounds %LSlice, ptr %t66, i32 0, i32 0 + %t68 = load ptr, ptr %t67 + %t69 = getelementptr inbounds ptr, ptr %t68, i32 2 + %t70 = load ptr, ptr %t69 + %t71 = call ptr @fn_emit_expr(ptr %t70) + store ptr %t71, ptr %t72 + %t73 = load ptr, ptr %t1 + %t74 = getelementptr inbounds %Cmp_Node, ptr %t73, i32 0, i32 7 + %t75 = load ptr, ptr %t74 + %t76 = getelementptr inbounds %LSlice, ptr %t75, i32 0, i32 0 + %t77 = load ptr, ptr %t76 + %t78 = getelementptr inbounds ptr, ptr %t77, i32 3 + %t79 = load ptr, ptr %t78 + %t80 = call ptr @fn_emit_expr(ptr %t79) + store ptr %t80, ptr %t81 + %t82 = load ptr, ptr %t54 + %t83 = getelementptr inbounds %Cmp_Val, ptr %t82, i32 0, i32 0 + %t84 = load ptr, ptr %t83 + %t85 = load ptr, ptr %t63 + %t86 = getelementptr inbounds %Cmp_Val, ptr %t85, i32 0, i32 0 + %t87 = load ptr, ptr %t86 + %t88 = load ptr, ptr %t72 + %t89 = getelementptr inbounds %Cmp_Val, ptr %t88, i32 0, i32 0 + %t90 = load ptr, ptr %t89 + %t91 = call ptr @fn_color_pack(ptr %t84, ptr %t87, ptr %t90) + store ptr %t91, ptr %t92 + %t93 = load ptr, ptr %t81 + %t94 = getelementptr inbounds %Cmp_Val, ptr %t93, i32 0, i32 0 + %t95 = load ptr, ptr %t94 + %t96 = call ptr @fn_str_concat(ptr @.str2324, ptr %t95) + %t97 = call ptr @fn_str_concat(ptr %t96, ptr @.str2325) + %t98 = call ptr @fn_emit_bind(ptr %t97) + store ptr %t98, ptr %t99 + %t100 = load ptr, ptr %t92 + %t101 = call ptr @fn_str_concat(ptr @.str2326, ptr %t100) + %t102 = call ptr @fn_str_concat(ptr %t101, ptr @.str2327) + %t103 = load ptr, ptr %t99 + %t104 = call ptr @fn_str_concat(ptr %t102, ptr %t103) + %t105 = call ptr @fn_emit_bind(ptr %t104) + %t106 = call ptr @fn_val(ptr %t105, ptr @.str2328) + store ptr %t106, ptr %retval + br label %ret +ifend5: + %t107 = load ptr, ptr %t0 + %t108 = call i32 @fn_str_eq(ptr %t107, ptr @.str2329) + %t109 = icmp ne i32 %t108, 0 + br i1 %t109, label %then6, label %ifend8 +then6: + %t110 = load ptr, ptr %t1 + %t111 = getelementptr inbounds %Cmp_Node, ptr %t110, i32 0, i32 7 + %t112 = load ptr, ptr %t111 + %t113 = getelementptr inbounds %LSlice, ptr %t112, i32 0, i32 0 + %t114 = load ptr, ptr %t113 + %t115 = getelementptr inbounds ptr, ptr %t114, i32 0 + %t116 = load ptr, ptr %t115 + %t117 = call ptr @fn_emit_expr(ptr %t116) + store ptr %t117, ptr %t118 + %t119 = load ptr, ptr %t1 + %t120 = getelementptr inbounds %Cmp_Node, ptr %t119, i32 0, i32 7 + %t121 = load ptr, ptr %t120 + %t122 = getelementptr inbounds %LSlice, ptr %t121, i32 0, i32 0 + %t123 = load ptr, ptr %t122 + %t124 = getelementptr inbounds ptr, ptr %t123, i32 1 + %t125 = load ptr, ptr %t124 + %t126 = call ptr @fn_emit_expr(ptr %t125) + store ptr %t126, ptr %t127 + %t128 = load ptr, ptr %t118 + %t129 = getelementptr inbounds %Cmp_Val, ptr %t128, i32 0, i32 0 + %t130 = load ptr, ptr %t129 + %t131 = call ptr @fn_str_concat(ptr @.str2330, ptr %t130) + %t132 = call ptr @fn_str_concat(ptr %t131, ptr @.str2331) + %t133 = call ptr @fn_emit_bind(ptr %t132) + store ptr %t133, ptr %t134 + %t135 = load ptr, ptr %t127 + %t136 = getelementptr inbounds %Cmp_Val, ptr %t135, i32 0, i32 0 + %t137 = load ptr, ptr %t136 + %t138 = call ptr @fn_str_concat(ptr @.str2332, ptr %t137) + %t139 = call ptr @fn_str_concat(ptr %t138, ptr @.str2333) + %t140 = call ptr @fn_emit_bind(ptr %t139) + store ptr %t140, ptr %t141 + %t142 = load ptr, ptr %t134 + %t143 = call ptr @fn_str_concat(ptr @.str2334, ptr %t142) + %t144 = call ptr @fn_str_concat(ptr %t143, ptr @.str2335) + %t145 = load ptr, ptr %t141 + %t146 = call ptr @fn_str_concat(ptr %t144, ptr %t145) + %t147 = call ptr @fn_emit_bind(ptr %t146) + %t148 = call ptr @fn_val(ptr %t147, ptr @.str2336) + store ptr %t148, ptr %retval + br label %ret +ifend8: + %t149 = load ptr, ptr %t0 + %t150 = call i32 @fn_str_eq(ptr %t149, ptr @.str2337) + %t151 = icmp ne i32 %t150, 0 + br i1 %t151, label %then9, label %ifend11 +then9: + %t152 = load ptr, ptr %t1 + %t153 = getelementptr inbounds %Cmp_Node, ptr %t152, i32 0, i32 7 + %t154 = load ptr, ptr %t153 + %t155 = getelementptr inbounds %LSlice, ptr %t154, i32 0, i32 0 + %t156 = load ptr, ptr %t155 + %t157 = getelementptr inbounds ptr, ptr %t156, i32 0 + %t158 = load ptr, ptr %t157 + %t159 = call ptr @fn_emit_expr(ptr %t158) + store ptr %t159, ptr %t160 + %t161 = load ptr, ptr %t1 + %t162 = getelementptr inbounds %Cmp_Node, ptr %t161, i32 0, i32 7 + %t163 = load ptr, ptr %t162 + %t164 = getelementptr inbounds %LSlice, ptr %t163, i32 0, i32 0 + %t165 = load ptr, ptr %t164 + %t166 = getelementptr inbounds ptr, ptr %t165, i32 1 + %t167 = load ptr, ptr %t166 + %t168 = call ptr @fn_emit_expr(ptr %t167) + store ptr %t168, ptr %t169 + %t170 = load ptr, ptr %t1 + %t171 = getelementptr inbounds %Cmp_Node, ptr %t170, i32 0, i32 7 + %t172 = load ptr, ptr %t171 + %t173 = getelementptr inbounds %LSlice, ptr %t172, i32 0, i32 0 + %t174 = load ptr, ptr %t173 + %t175 = getelementptr inbounds ptr, ptr %t174, i32 2 + %t176 = load ptr, ptr %t175 + %t177 = call ptr @fn_emit_expr(ptr %t176) + store ptr %t177, ptr %t178 + %t179 = load ptr, ptr %t160 + %t180 = getelementptr inbounds %Cmp_Val, ptr %t179, i32 0, i32 0 + %t181 = load ptr, ptr %t180 + %t182 = call ptr @fn_color_ch(ptr %t181, ptr @.str2338) + %t183 = load ptr, ptr %t169 + %t184 = getelementptr inbounds %Cmp_Val, ptr %t183, i32 0, i32 0 + %t185 = load ptr, ptr %t184 + %t186 = call ptr @fn_color_ch(ptr %t185, ptr @.str2339) + %t187 = load ptr, ptr %t178 + %t188 = getelementptr inbounds %Cmp_Val, ptr %t187, i32 0, i32 0 + %t189 = load ptr, ptr %t188 + %t190 = call ptr @fn_color_lerp_ch(ptr %t182, ptr %t186, ptr %t189) + store ptr %t190, ptr %t191 + %t192 = load ptr, ptr %t160 + %t193 = getelementptr inbounds %Cmp_Val, ptr %t192, i32 0, i32 0 + %t194 = load ptr, ptr %t193 + %t195 = call ptr @fn_color_ch(ptr %t194, ptr @.str2340) + %t196 = load ptr, ptr %t169 + %t197 = getelementptr inbounds %Cmp_Val, ptr %t196, i32 0, i32 0 + %t198 = load ptr, ptr %t197 + %t199 = call ptr @fn_color_ch(ptr %t198, ptr @.str2341) + %t200 = load ptr, ptr %t178 + %t201 = getelementptr inbounds %Cmp_Val, ptr %t200, i32 0, i32 0 + %t202 = load ptr, ptr %t201 + %t203 = call ptr @fn_color_lerp_ch(ptr %t195, ptr %t199, ptr %t202) + store ptr %t203, ptr %t204 + %t205 = load ptr, ptr %t160 + %t206 = getelementptr inbounds %Cmp_Val, ptr %t205, i32 0, i32 0 + %t207 = load ptr, ptr %t206 + %t208 = call ptr @fn_color_ch(ptr %t207, ptr @.str2342) + %t209 = load ptr, ptr %t169 + %t210 = getelementptr inbounds %Cmp_Val, ptr %t209, i32 0, i32 0 + %t211 = load ptr, ptr %t210 + %t212 = call ptr @fn_color_ch(ptr %t211, ptr @.str2343) + %t213 = load ptr, ptr %t178 + %t214 = getelementptr inbounds %Cmp_Val, ptr %t213, i32 0, i32 0 + %t215 = load ptr, ptr %t214 + %t216 = call ptr @fn_color_lerp_ch(ptr %t208, ptr %t212, ptr %t215) + store ptr %t216, ptr %t217 + %t218 = load ptr, ptr %t191 + %t219 = load ptr, ptr %t204 + %t220 = load ptr, ptr %t217 + %t221 = call ptr @fn_color_pack(ptr %t218, ptr %t219, ptr %t220) + %t222 = call ptr @fn_val(ptr %t221, ptr @.str2344) + store ptr %t222, ptr %retval + br label %ret +ifend11: + %t223 = load ptr, ptr %t0 + %t224 = call i32 @fn_str_eq(ptr %t223, ptr @.str2345) + %t225 = icmp ne i32 %t224, 0 + br i1 %t225, label %then12, label %ifend14 +then12: + %t226 = load ptr, ptr %t1 + %t227 = getelementptr inbounds %Cmp_Node, ptr %t226, i32 0, i32 7 + %t228 = load ptr, ptr %t227 + %t229 = getelementptr inbounds %LSlice, ptr %t228, i32 0, i32 0 + %t230 = load ptr, ptr %t229 + %t231 = getelementptr inbounds ptr, ptr %t230, i32 0 + %t232 = load ptr, ptr %t231 + %t233 = call ptr @fn_emit_expr(ptr %t232) + store ptr %t233, ptr %t234 + %t235 = load ptr, ptr %t1 + %t236 = getelementptr inbounds %Cmp_Node, ptr %t235, i32 0, i32 7 + %t237 = load ptr, ptr %t236 + %t238 = getelementptr inbounds %LSlice, ptr %t237, i32 0, i32 0 + %t239 = load ptr, ptr %t238 + %t240 = getelementptr inbounds ptr, ptr %t239, i32 1 + %t241 = load ptr, ptr %t240 + %t242 = call ptr @fn_emit_expr(ptr %t241) + store ptr %t242, ptr %t243 + %t244 = load ptr, ptr %t243 + %t245 = getelementptr inbounds %Cmp_Val, ptr %t244, i32 0, i32 0 + %t246 = load ptr, ptr %t245 + %t247 = call ptr @fn_str_concat(ptr @.str2346, ptr %t246) + %t248 = call ptr @fn_emit_bind(ptr %t247) + store ptr %t248, ptr %t249 + %t250 = load ptr, ptr %t234 + %t251 = getelementptr inbounds %Cmp_Val, ptr %t250, i32 0, i32 0 + %t252 = load ptr, ptr %t251 + %t253 = call ptr @fn_color_ch(ptr %t252, ptr @.str2347) + store ptr %t253, ptr %t254 + %t255 = load ptr, ptr %t234 + %t256 = getelementptr inbounds %Cmp_Val, ptr %t255, i32 0, i32 0 + %t257 = load ptr, ptr %t256 + %t258 = call ptr @fn_color_ch(ptr %t257, ptr @.str2348) + store ptr %t258, ptr %t259 + %t260 = load ptr, ptr %t234 + %t261 = getelementptr inbounds %Cmp_Val, ptr %t260, i32 0, i32 0 + %t262 = load ptr, ptr %t261 + %t263 = call ptr @fn_color_ch(ptr %t262, ptr @.str2349) + store ptr %t263, ptr %t264 + %t265 = load ptr, ptr %t254 + %t266 = call ptr @fn_str_concat(ptr @.str2350, ptr %t265) + %t267 = call ptr @fn_str_concat(ptr %t266, ptr @.str2351) + %t268 = load ptr, ptr %t249 + %t269 = call ptr @fn_str_concat(ptr %t267, ptr %t268) + %t270 = call ptr @fn_emit_bind(ptr %t269) + store ptr %t270, ptr %t271 + %t272 = load ptr, ptr %t271 + %t273 = call ptr @fn_str_concat(ptr @.str2352, ptr %t272) + %t274 = call ptr @fn_str_concat(ptr %t273, ptr @.str2353) + %t275 = call ptr @fn_emit_bind(ptr %t274) + store ptr %t275, ptr %t276 + %t277 = load ptr, ptr %t259 + %t278 = call ptr @fn_str_concat(ptr @.str2354, ptr %t277) + %t279 = call ptr @fn_str_concat(ptr %t278, ptr @.str2355) + %t280 = load ptr, ptr %t249 + %t281 = call ptr @fn_str_concat(ptr %t279, ptr %t280) + %t282 = call ptr @fn_emit_bind(ptr %t281) + store ptr %t282, ptr %t283 + %t284 = load ptr, ptr %t283 + %t285 = call ptr @fn_str_concat(ptr @.str2356, ptr %t284) + %t286 = call ptr @fn_str_concat(ptr %t285, ptr @.str2357) + %t287 = call ptr @fn_emit_bind(ptr %t286) + store ptr %t287, ptr %t288 + %t289 = load ptr, ptr %t264 + %t290 = call ptr @fn_str_concat(ptr @.str2358, ptr %t289) + %t291 = call ptr @fn_str_concat(ptr %t290, ptr @.str2359) + %t292 = load ptr, ptr %t249 + %t293 = call ptr @fn_str_concat(ptr %t291, ptr %t292) + %t294 = call ptr @fn_emit_bind(ptr %t293) + store ptr %t294, ptr %t295 + %t296 = load ptr, ptr %t295 + %t297 = call ptr @fn_str_concat(ptr @.str2360, ptr %t296) + %t298 = call ptr @fn_str_concat(ptr %t297, ptr @.str2361) + %t299 = call ptr @fn_emit_bind(ptr %t298) + store ptr %t299, ptr %t300 + %t301 = load ptr, ptr %t276 + %t302 = load ptr, ptr %t288 + %t303 = load ptr, ptr %t300 + %t304 = call ptr @fn_color_pack(ptr %t301, ptr %t302, ptr %t303) + %t305 = call ptr @fn_val(ptr %t304, ptr @.str2362) + store ptr %t305, ptr %retval + br label %ret +ifend14: + %t306 = load ptr, ptr %t1 + %t307 = getelementptr inbounds %Cmp_Node, ptr %t306, i32 0, i32 7 + %t308 = load ptr, ptr %t307 + %t309 = getelementptr inbounds %LSlice, ptr %t308, i32 0, i32 0 + %t310 = load ptr, ptr %t309 + %t311 = getelementptr inbounds ptr, ptr %t310, i32 0 + %t312 = load ptr, ptr %t311 + %t313 = call ptr @fn_emit_expr(ptr %t312) + store ptr %t313, ptr %t314 + %t315 = load ptr, ptr %t1 + %t316 = getelementptr inbounds %Cmp_Node, ptr %t315, i32 0, i32 7 + %t317 = load ptr, ptr %t316 + %t318 = getelementptr inbounds %LSlice, ptr %t317, i32 0, i32 0 + %t319 = load ptr, ptr %t318 + %t320 = getelementptr inbounds ptr, ptr %t319, i32 1 + %t321 = load ptr, ptr %t320 + %t322 = call ptr @fn_emit_expr(ptr %t321) + store ptr %t322, ptr %t323 + %t324 = load ptr, ptr %t314 + %t325 = getelementptr inbounds %Cmp_Val, ptr %t324, i32 0, i32 0 + %t326 = load ptr, ptr %t325 + %t327 = call ptr @fn_color_ch(ptr %t326, ptr @.str2363) + store ptr %t327, ptr %t328 + %t329 = load ptr, ptr %t314 + %t330 = getelementptr inbounds %Cmp_Val, ptr %t329, i32 0, i32 0 + %t331 = load ptr, ptr %t330 + %t332 = call ptr @fn_color_ch(ptr %t331, ptr @.str2364) + store ptr %t332, ptr %t333 + %t334 = load ptr, ptr %t314 + %t335 = getelementptr inbounds %Cmp_Val, ptr %t334, i32 0, i32 0 + %t336 = load ptr, ptr %t335 + %t337 = call ptr @fn_color_ch(ptr %t336, ptr @.str2365) + store ptr %t337, ptr %t338 + %t339 = load ptr, ptr %t328 + %t340 = call ptr @fn_str_concat(ptr @.str2366, ptr %t339) + %t341 = call ptr @fn_emit_bind(ptr %t340) + store ptr %t341, ptr %t342 + %t343 = load ptr, ptr %t342 + %t344 = call ptr @fn_str_concat(ptr @.str2367, ptr %t343) + %t345 = call ptr @fn_str_concat(ptr %t344, ptr @.str2368) + %t346 = load ptr, ptr %t323 + %t347 = getelementptr inbounds %Cmp_Val, ptr %t346, i32 0, i32 0 + %t348 = load ptr, ptr %t347 + %t349 = call ptr @fn_str_concat(ptr %t345, ptr %t348) + %t350 = call ptr @fn_emit_bind(ptr %t349) + store ptr %t350, ptr %t351 + %t352 = load ptr, ptr %t351 + %t353 = call ptr @fn_str_concat(ptr @.str2369, ptr %t352) + %t354 = call ptr @fn_str_concat(ptr %t353, ptr @.str2370) + %t355 = call ptr @fn_emit_bind(ptr %t354) + store ptr %t355, ptr %t356 + %t357 = load ptr, ptr %t328 + %t358 = call ptr @fn_str_concat(ptr @.str2371, ptr %t357) + %t359 = call ptr @fn_str_concat(ptr %t358, ptr @.str2372) + %t360 = load ptr, ptr %t356 + %t361 = call ptr @fn_str_concat(ptr %t359, ptr %t360) + %t362 = call ptr @fn_emit_bind(ptr %t361) + store ptr %t362, ptr %t363 + %t364 = load ptr, ptr %t333 + %t365 = call ptr @fn_str_concat(ptr @.str2373, ptr %t364) + %t366 = call ptr @fn_emit_bind(ptr %t365) + store ptr %t366, ptr %t367 + %t368 = load ptr, ptr %t367 + %t369 = call ptr @fn_str_concat(ptr @.str2374, ptr %t368) + %t370 = call ptr @fn_str_concat(ptr %t369, ptr @.str2375) + %t371 = load ptr, ptr %t323 + %t372 = getelementptr inbounds %Cmp_Val, ptr %t371, i32 0, i32 0 + %t373 = load ptr, ptr %t372 + %t374 = call ptr @fn_str_concat(ptr %t370, ptr %t373) + %t375 = call ptr @fn_emit_bind(ptr %t374) + store ptr %t375, ptr %t376 + %t377 = load ptr, ptr %t376 + %t378 = call ptr @fn_str_concat(ptr @.str2376, ptr %t377) + %t379 = call ptr @fn_str_concat(ptr %t378, ptr @.str2377) + %t380 = call ptr @fn_emit_bind(ptr %t379) + store ptr %t380, ptr %t381 + %t382 = load ptr, ptr %t333 + %t383 = call ptr @fn_str_concat(ptr @.str2378, ptr %t382) + %t384 = call ptr @fn_str_concat(ptr %t383, ptr @.str2379) + %t385 = load ptr, ptr %t381 + %t386 = call ptr @fn_str_concat(ptr %t384, ptr %t385) + %t387 = call ptr @fn_emit_bind(ptr %t386) + store ptr %t387, ptr %t388 + %t389 = load ptr, ptr %t338 + %t390 = call ptr @fn_str_concat(ptr @.str2380, ptr %t389) + %t391 = call ptr @fn_emit_bind(ptr %t390) + store ptr %t391, ptr %t392 + %t393 = load ptr, ptr %t392 + %t394 = call ptr @fn_str_concat(ptr @.str2381, ptr %t393) + %t395 = call ptr @fn_str_concat(ptr %t394, ptr @.str2382) + %t396 = load ptr, ptr %t323 + %t397 = getelementptr inbounds %Cmp_Val, ptr %t396, i32 0, i32 0 + %t398 = load ptr, ptr %t397 + %t399 = call ptr @fn_str_concat(ptr %t395, ptr %t398) + %t400 = call ptr @fn_emit_bind(ptr %t399) + store ptr %t400, ptr %t401 + %t402 = load ptr, ptr %t401 + %t403 = call ptr @fn_str_concat(ptr @.str2383, ptr %t402) + %t404 = call ptr @fn_str_concat(ptr %t403, ptr @.str2384) + %t405 = call ptr @fn_emit_bind(ptr %t404) + store ptr %t405, ptr %t406 + %t407 = load ptr, ptr %t338 + %t408 = call ptr @fn_str_concat(ptr @.str2385, ptr %t407) + %t409 = call ptr @fn_str_concat(ptr %t408, ptr @.str2386) + %t410 = load ptr, ptr %t406 + %t411 = call ptr @fn_str_concat(ptr %t409, ptr %t410) + %t412 = call ptr @fn_emit_bind(ptr %t411) + store ptr %t412, ptr %t413 + %t414 = load ptr, ptr %t363 + %t415 = load ptr, ptr %t388 + %t416 = load ptr, ptr %t413 + %t417 = call ptr @fn_color_pack(ptr %t414, ptr %t415, ptr %t416) + %t418 = call ptr @fn_val(ptr %t417, ptr @.str2387) + store ptr %t418, ptr %retval + br label %ret +ret: + %t419 = load ptr, ptr %retval + ret ptr %t419 } define i32 @fn_color_lookup(ptr %arg_name) { @@ -16870,7 +26481,7 @@ entry: %t0 = alloca ptr store ptr %arg_name, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str712) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str2388) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: @@ -16878,7 +26489,7 @@ then0: br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str713) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str2389) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: @@ -16886,7 +26497,7 @@ then3: br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str714) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str2390) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: @@ -16894,7 +26505,7 @@ then6: br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str715) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str2391) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: @@ -16902,7 +26513,7 @@ then9: br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str716) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str2392) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: @@ -16910,7 +26521,7 @@ then12: br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str717) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str2393) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: @@ -16918,7 +26529,7 @@ then15: br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str718) + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str2394) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: @@ -16926,7 +26537,7 @@ then18: br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str719) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str2395) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: @@ -16934,7 +26545,7 @@ then21: br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str720) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str2396) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: @@ -16942,7 +26553,7 @@ then24: br label %ret ifend26: %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str721) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str2397) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then27, label %ifend29 then27: @@ -16950,7 +26561,7 @@ then27: br label %ret ifend29: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str722) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str2398) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then30, label %ifend32 then30: @@ -16958,7 +26569,7 @@ then30: br label %ret ifend32: %t34 = load ptr, ptr %t0 - %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str723) + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str2399) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then33, label %ifend35 then33: @@ -16966,7 +26577,7 @@ then33: br label %ret ifend35: %t37 = load ptr, ptr %t0 - %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str724) + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str2400) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then36, label %ifend38 then36: @@ -16974,7 +26585,7 @@ then36: br label %ret ifend38: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str725) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str2401) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then39, label %ifend41 then39: @@ -16982,7 +26593,7 @@ then39: br label %ret ifend41: %t43 = load ptr, ptr %t0 - %t44 = call i32 @fn_str_eq(ptr %t43, ptr @.str726) + %t44 = call i32 @fn_str_eq(ptr %t43, ptr @.str2402) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then42, label %ifend44 then42: @@ -16990,7 +26601,7 @@ then42: br label %ret ifend44: %t46 = load ptr, ptr %t0 - %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str727) + %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str2403) %t48 = icmp ne i32 %t47, 0 br i1 %t48, label %then45, label %ifend47 then45: @@ -16998,7 +26609,7 @@ then45: br label %ret ifend47: %t49 = load ptr, ptr %t0 - %t50 = call i32 @fn_str_eq(ptr %t49, ptr @.str728) + %t50 = call i32 @fn_str_eq(ptr %t49, ptr @.str2404) %t51 = icmp ne i32 %t50, 0 br i1 %t51, label %then48, label %ifend50 then48: @@ -17006,7 +26617,7 @@ then48: br label %ret ifend50: %t52 = load ptr, ptr %t0 - %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str729) + %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str2405) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then51, label %ifend53 then51: @@ -17014,7 +26625,7 @@ then51: br label %ret ifend53: %t55 = load ptr, ptr %t0 - %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str730) + %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str2406) %t57 = icmp ne i32 %t56, 0 br i1 %t57, label %then54, label %ifend56 then54: @@ -17022,7 +26633,7 @@ then54: br label %ret ifend56: %t58 = load ptr, ptr %t0 - %t59 = call i32 @fn_str_eq(ptr %t58, ptr @.str731) + %t59 = call i32 @fn_str_eq(ptr %t58, ptr @.str2407) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then57, label %ifend59 then57: @@ -17030,7 +26641,7 @@ then57: br label %ret ifend59: %t61 = load ptr, ptr %t0 - %t62 = call i32 @fn_str_eq(ptr %t61, ptr @.str732) + %t62 = call i32 @fn_str_eq(ptr %t61, ptr @.str2408) %t63 = icmp ne i32 %t62, 0 br i1 %t63, label %then60, label %ifend62 then60: @@ -17038,7 +26649,7 @@ then60: br label %ret ifend62: %t64 = load ptr, ptr %t0 - %t65 = call i32 @fn_str_eq(ptr %t64, ptr @.str733) + %t65 = call i32 @fn_str_eq(ptr %t64, ptr @.str2409) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then63, label %ifend65 then63: @@ -17046,7 +26657,7 @@ then63: br label %ret ifend65: %t67 = load ptr, ptr %t0 - %t68 = call i32 @fn_str_eq(ptr %t67, ptr @.str734) + %t68 = call i32 @fn_str_eq(ptr %t67, ptr @.str2410) %t69 = icmp ne i32 %t68, 0 br i1 %t69, label %then66, label %ifend68 then66: @@ -17054,7 +26665,7 @@ then66: br label %ret ifend68: %t70 = load ptr, ptr %t0 - %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str735) + %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str2411) %t72 = icmp ne i32 %t71, 0 br i1 %t72, label %then69, label %ifend71 then69: @@ -17062,7 +26673,7 @@ then69: br label %ret ifend71: %t73 = load ptr, ptr %t0 - %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str736) + %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str2412) %t75 = icmp ne i32 %t74, 0 br i1 %t75, label %then72, label %ifend74 then72: @@ -17070,7 +26681,7 @@ then72: br label %ret ifend74: %t76 = load ptr, ptr %t0 - %t77 = call i32 @fn_str_eq(ptr %t76, ptr @.str737) + %t77 = call i32 @fn_str_eq(ptr %t76, ptr @.str2413) %t78 = icmp ne i32 %t77, 0 br i1 %t78, label %then75, label %ifend77 then75: @@ -17078,7 +26689,7 @@ then75: br label %ret ifend77: %t79 = load ptr, ptr %t0 - %t80 = call i32 @fn_str_eq(ptr %t79, ptr @.str738) + %t80 = call i32 @fn_str_eq(ptr %t79, ptr @.str2414) %t81 = icmp ne i32 %t80, 0 br i1 %t81, label %then78, label %ifend80 then78: @@ -17086,7 +26697,7 @@ then78: br label %ret ifend80: %t82 = load ptr, ptr %t0 - %t83 = call i32 @fn_str_eq(ptr %t82, ptr @.str739) + %t83 = call i32 @fn_str_eq(ptr %t82, ptr @.str2415) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then81, label %ifend83 then81: @@ -17094,7 +26705,7 @@ then81: br label %ret ifend83: %t85 = load ptr, ptr %t0 - %t86 = call i32 @fn_str_eq(ptr %t85, ptr @.str740) + %t86 = call i32 @fn_str_eq(ptr %t85, ptr @.str2416) %t87 = icmp ne i32 %t86, 0 br i1 %t87, label %then84, label %ifend86 then84: @@ -17102,7 +26713,7 @@ then84: br label %ret ifend86: %t88 = load ptr, ptr %t0 - %t89 = call i32 @fn_str_eq(ptr %t88, ptr @.str741) + %t89 = call i32 @fn_str_eq(ptr %t88, ptr @.str2417) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then87, label %ifend89 then87: @@ -17110,7 +26721,7 @@ then87: br label %ret ifend89: %t91 = load ptr, ptr %t0 - %t92 = call i32 @fn_str_eq(ptr %t91, ptr @.str742) + %t92 = call i32 @fn_str_eq(ptr %t91, ptr @.str2418) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then90, label %ifend92 then90: @@ -17118,7 +26729,7 @@ then90: br label %ret ifend92: %t94 = load ptr, ptr %t0 - %t95 = call i32 @fn_str_eq(ptr %t94, ptr @.str743) + %t95 = call i32 @fn_str_eq(ptr %t94, ptr @.str2419) %t96 = icmp ne i32 %t95, 0 br i1 %t96, label %then93, label %ifend95 then93: @@ -17126,7 +26737,7 @@ then93: br label %ret ifend95: %t97 = load ptr, ptr %t0 - %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str744) + %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str2420) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then96, label %ifend98 then96: @@ -17134,7 +26745,7 @@ then96: br label %ret ifend98: %t100 = load ptr, ptr %t0 - %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str745) + %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str2421) %t102 = icmp ne i32 %t101, 0 br i1 %t102, label %then99, label %ifend101 then99: @@ -17142,7 +26753,7 @@ then99: br label %ret ifend101: %t103 = load ptr, ptr %t0 - %t104 = call i32 @fn_str_eq(ptr %t103, ptr @.str746) + %t104 = call i32 @fn_str_eq(ptr %t103, ptr @.str2422) %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then102, label %ifend104 then102: @@ -17150,7 +26761,7 @@ then102: br label %ret ifend104: %t106 = load ptr, ptr %t0 - %t107 = call i32 @fn_str_eq(ptr %t106, ptr @.str747) + %t107 = call i32 @fn_str_eq(ptr %t106, ptr @.str2423) %t108 = icmp ne i32 %t107, 0 br i1 %t108, label %then105, label %ifend107 then105: @@ -17158,7 +26769,7 @@ then105: br label %ret ifend107: %t109 = load ptr, ptr %t0 - %t110 = call i32 @fn_str_eq(ptr %t109, ptr @.str748) + %t110 = call i32 @fn_str_eq(ptr %t109, ptr @.str2424) %t111 = icmp ne i32 %t110, 0 br i1 %t111, label %then108, label %ifend110 then108: @@ -17166,7 +26777,7 @@ then108: br label %ret ifend110: %t112 = load ptr, ptr %t0 - %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str749) + %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str2425) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then111, label %ifend113 then111: @@ -17174,7 +26785,7 @@ then111: br label %ret ifend113: %t115 = load ptr, ptr %t0 - %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str750) + %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str2426) %t117 = icmp ne i32 %t116, 0 br i1 %t117, label %then114, label %ifend116 then114: @@ -17182,7 +26793,7 @@ then114: br label %ret ifend116: %t118 = load ptr, ptr %t0 - %t119 = call i32 @fn_str_eq(ptr %t118, ptr @.str751) + %t119 = call i32 @fn_str_eq(ptr %t118, ptr @.str2427) %t120 = icmp ne i32 %t119, 0 br i1 %t120, label %then117, label %ifend119 then117: @@ -17190,7 +26801,7 @@ then117: br label %ret ifend119: %t121 = load ptr, ptr %t0 - %t122 = call i32 @fn_str_eq(ptr %t121, ptr @.str752) + %t122 = call i32 @fn_str_eq(ptr %t121, ptr @.str2428) %t123 = icmp ne i32 %t122, 0 br i1 %t123, label %then120, label %ifend122 then120: @@ -17198,7 +26809,7 @@ then120: br label %ret ifend122: %t124 = load ptr, ptr %t0 - %t125 = call i32 @fn_str_eq(ptr %t124, ptr @.str753) + %t125 = call i32 @fn_str_eq(ptr %t124, ptr @.str2429) %t126 = icmp ne i32 %t125, 0 br i1 %t126, label %then123, label %ifend125 then123: @@ -17206,7 +26817,7 @@ then123: br label %ret ifend125: %t127 = load ptr, ptr %t0 - %t128 = call i32 @fn_str_eq(ptr %t127, ptr @.str754) + %t128 = call i32 @fn_str_eq(ptr %t127, ptr @.str2430) %t129 = icmp ne i32 %t128, 0 br i1 %t129, label %then126, label %ifend128 then126: @@ -17214,7 +26825,7 @@ then126: br label %ret ifend128: %t130 = load ptr, ptr %t0 - %t131 = call i32 @fn_str_eq(ptr %t130, ptr @.str755) + %t131 = call i32 @fn_str_eq(ptr %t130, ptr @.str2431) %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then129, label %ifend131 then129: @@ -17222,7 +26833,7 @@ then129: br label %ret ifend131: %t133 = load ptr, ptr %t0 - %t134 = call i32 @fn_str_eq(ptr %t133, ptr @.str756) + %t134 = call i32 @fn_str_eq(ptr %t133, ptr @.str2432) %t135 = icmp ne i32 %t134, 0 br i1 %t135, label %then132, label %ifend134 then132: @@ -17230,7 +26841,7 @@ then132: br label %ret ifend134: %t136 = load ptr, ptr %t0 - %t137 = call i32 @fn_str_eq(ptr %t136, ptr @.str757) + %t137 = call i32 @fn_str_eq(ptr %t136, ptr @.str2433) %t138 = icmp ne i32 %t137, 0 br i1 %t138, label %then135, label %ifend137 then135: @@ -17238,7 +26849,7 @@ then135: br label %ret ifend137: %t139 = load ptr, ptr %t0 - %t140 = call i32 @fn_str_eq(ptr %t139, ptr @.str758) + %t140 = call i32 @fn_str_eq(ptr %t139, ptr @.str2434) %t141 = icmp ne i32 %t140, 0 br i1 %t141, label %then138, label %ifend140 then138: @@ -17246,7 +26857,7 @@ then138: br label %ret ifend140: %t142 = load ptr, ptr %t0 - %t143 = call i32 @fn_str_eq(ptr %t142, ptr @.str759) + %t143 = call i32 @fn_str_eq(ptr %t142, ptr @.str2435) %t144 = icmp ne i32 %t143, 0 br i1 %t144, label %then141, label %ifend143 then141: @@ -17254,7 +26865,7 @@ then141: br label %ret ifend143: %t145 = load ptr, ptr %t0 - %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str760) + %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str2436) %t147 = icmp ne i32 %t146, 0 br i1 %t147, label %then144, label %ifend146 then144: @@ -17262,7 +26873,7 @@ then144: br label %ret ifend146: %t148 = load ptr, ptr %t0 - %t149 = call i32 @fn_str_eq(ptr %t148, ptr @.str761) + %t149 = call i32 @fn_str_eq(ptr %t148, ptr @.str2437) %t150 = icmp ne i32 %t149, 0 br i1 %t150, label %then147, label %ifend149 then147: @@ -17270,7 +26881,7 @@ then147: br label %ret ifend149: %t151 = load ptr, ptr %t0 - %t152 = call i32 @fn_str_eq(ptr %t151, ptr @.str762) + %t152 = call i32 @fn_str_eq(ptr %t151, ptr @.str2438) %t153 = icmp ne i32 %t152, 0 br i1 %t153, label %then150, label %ifend152 then150: @@ -17278,7 +26889,7 @@ then150: br label %ret ifend152: %t154 = load ptr, ptr %t0 - %t155 = call i32 @fn_str_eq(ptr %t154, ptr @.str763) + %t155 = call i32 @fn_str_eq(ptr %t154, ptr @.str2439) %t156 = icmp ne i32 %t155, 0 br i1 %t156, label %then153, label %ifend155 then153: @@ -17286,7 +26897,7 @@ then153: br label %ret ifend155: %t157 = load ptr, ptr %t0 - %t158 = call i32 @fn_str_eq(ptr %t157, ptr @.str764) + %t158 = call i32 @fn_str_eq(ptr %t157, ptr @.str2440) %t159 = icmp ne i32 %t158, 0 br i1 %t159, label %then156, label %ifend158 then156: @@ -17294,7 +26905,7 @@ then156: br label %ret ifend158: %t160 = load ptr, ptr %t0 - %t161 = call i32 @fn_str_eq(ptr %t160, ptr @.str765) + %t161 = call i32 @fn_str_eq(ptr %t160, ptr @.str2441) %t162 = icmp ne i32 %t161, 0 br i1 %t162, label %then159, label %ifend161 then159: @@ -17302,7 +26913,7 @@ then159: br label %ret ifend161: %t163 = load ptr, ptr %t0 - %t164 = call i32 @fn_str_eq(ptr %t163, ptr @.str766) + %t164 = call i32 @fn_str_eq(ptr %t163, ptr @.str2442) %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then162, label %ifend164 then162: @@ -17310,7 +26921,7 @@ then162: br label %ret ifend164: %t166 = load ptr, ptr %t0 - %t167 = call i32 @fn_str_eq(ptr %t166, ptr @.str767) + %t167 = call i32 @fn_str_eq(ptr %t166, ptr @.str2443) %t168 = icmp ne i32 %t167, 0 br i1 %t168, label %then165, label %ifend167 then165: @@ -17318,7 +26929,7 @@ then165: br label %ret ifend167: %t169 = load ptr, ptr %t0 - %t170 = call i32 @fn_str_eq(ptr %t169, ptr @.str768) + %t170 = call i32 @fn_str_eq(ptr %t169, ptr @.str2444) %t171 = icmp ne i32 %t170, 0 br i1 %t171, label %then168, label %ifend170 then168: @@ -17326,7 +26937,7 @@ then168: br label %ret ifend170: %t172 = load ptr, ptr %t0 - %t173 = call i32 @fn_str_eq(ptr %t172, ptr @.str769) + %t173 = call i32 @fn_str_eq(ptr %t172, ptr @.str2445) %t174 = icmp ne i32 %t173, 0 br i1 %t174, label %then171, label %ifend173 then171: @@ -17334,7 +26945,7 @@ then171: br label %ret ifend173: %t175 = load ptr, ptr %t0 - %t176 = call i32 @fn_str_eq(ptr %t175, ptr @.str770) + %t176 = call i32 @fn_str_eq(ptr %t175, ptr @.str2446) %t177 = icmp ne i32 %t176, 0 br i1 %t177, label %then174, label %ifend176 then174: @@ -17342,7 +26953,7 @@ then174: br label %ret ifend176: %t178 = load ptr, ptr %t0 - %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str771) + %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str2447) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then177, label %ifend179 then177: @@ -17350,7 +26961,7 @@ then177: br label %ret ifend179: %t181 = load ptr, ptr %t0 - %t182 = call i32 @fn_str_eq(ptr %t181, ptr @.str772) + %t182 = call i32 @fn_str_eq(ptr %t181, ptr @.str2448) %t183 = icmp ne i32 %t182, 0 br i1 %t183, label %then180, label %ifend182 then180: @@ -17358,7 +26969,7 @@ then180: br label %ret ifend182: %t184 = load ptr, ptr %t0 - %t185 = call i32 @fn_str_eq(ptr %t184, ptr @.str773) + %t185 = call i32 @fn_str_eq(ptr %t184, ptr @.str2449) %t186 = icmp ne i32 %t185, 0 br i1 %t186, label %then183, label %ifend185 then183: @@ -17366,7 +26977,7 @@ then183: br label %ret ifend185: %t187 = load ptr, ptr %t0 - %t188 = call i32 @fn_str_eq(ptr %t187, ptr @.str774) + %t188 = call i32 @fn_str_eq(ptr %t187, ptr @.str2450) %t189 = icmp ne i32 %t188, 0 br i1 %t189, label %then186, label %ifend188 then186: @@ -17374,7 +26985,7 @@ then186: br label %ret ifend188: %t190 = load ptr, ptr %t0 - %t191 = call i32 @fn_str_eq(ptr %t190, ptr @.str775) + %t191 = call i32 @fn_str_eq(ptr %t190, ptr @.str2451) %t192 = icmp ne i32 %t191, 0 br i1 %t192, label %then189, label %ifend191 then189: @@ -17382,7 +26993,7 @@ then189: br label %ret ifend191: %t193 = load ptr, ptr %t0 - %t194 = call i32 @fn_str_eq(ptr %t193, ptr @.str776) + %t194 = call i32 @fn_str_eq(ptr %t193, ptr @.str2452) %t195 = icmp ne i32 %t194, 0 br i1 %t195, label %then192, label %ifend194 then192: @@ -17390,7 +27001,7 @@ then192: br label %ret ifend194: %t196 = load ptr, ptr %t0 - %t197 = call i32 @fn_str_eq(ptr %t196, ptr @.str777) + %t197 = call i32 @fn_str_eq(ptr %t196, ptr @.str2453) %t198 = icmp ne i32 %t197, 0 br i1 %t198, label %then195, label %ifend197 then195: @@ -17398,7 +27009,7 @@ then195: br label %ret ifend197: %t199 = load ptr, ptr %t0 - %t200 = call i32 @fn_str_eq(ptr %t199, ptr @.str778) + %t200 = call i32 @fn_str_eq(ptr %t199, ptr @.str2454) %t201 = icmp ne i32 %t200, 0 br i1 %t201, label %then198, label %ifend200 then198: @@ -17406,7 +27017,7 @@ then198: br label %ret ifend200: %t202 = load ptr, ptr %t0 - %t203 = call i32 @fn_str_eq(ptr %t202, ptr @.str779) + %t203 = call i32 @fn_str_eq(ptr %t202, ptr @.str2455) %t204 = icmp ne i32 %t203, 0 br i1 %t204, label %then201, label %ifend203 then201: @@ -17414,7 +27025,7 @@ then201: br label %ret ifend203: %t205 = load ptr, ptr %t0 - %t206 = call i32 @fn_str_eq(ptr %t205, ptr @.str780) + %t206 = call i32 @fn_str_eq(ptr %t205, ptr @.str2456) %t207 = icmp ne i32 %t206, 0 br i1 %t207, label %then204, label %ifend206 then204: @@ -17422,7 +27033,7 @@ then204: br label %ret ifend206: %t208 = load ptr, ptr %t0 - %t209 = call i32 @fn_str_eq(ptr %t208, ptr @.str781) + %t209 = call i32 @fn_str_eq(ptr %t208, ptr @.str2457) %t210 = icmp ne i32 %t209, 0 br i1 %t210, label %then207, label %ifend209 then207: @@ -17430,7 +27041,7 @@ then207: br label %ret ifend209: %t211 = load ptr, ptr %t0 - %t212 = call i32 @fn_str_eq(ptr %t211, ptr @.str782) + %t212 = call i32 @fn_str_eq(ptr %t211, ptr @.str2458) %t213 = icmp ne i32 %t212, 0 br i1 %t213, label %then210, label %ifend212 then210: @@ -17438,7 +27049,7 @@ then210: br label %ret ifend212: %t214 = load ptr, ptr %t0 - %t215 = call i32 @fn_str_eq(ptr %t214, ptr @.str783) + %t215 = call i32 @fn_str_eq(ptr %t214, ptr @.str2459) %t216 = icmp ne i32 %t215, 0 br i1 %t216, label %then213, label %ifend215 then213: @@ -17446,7 +27057,7 @@ then213: br label %ret ifend215: %t217 = load ptr, ptr %t0 - %t218 = call i32 @fn_str_eq(ptr %t217, ptr @.str784) + %t218 = call i32 @fn_str_eq(ptr %t217, ptr @.str2460) %t219 = icmp ne i32 %t218, 0 br i1 %t219, label %then216, label %ifend218 then216: @@ -17454,7 +27065,7 @@ then216: br label %ret ifend218: %t220 = load ptr, ptr %t0 - %t221 = call i32 @fn_str_eq(ptr %t220, ptr @.str785) + %t221 = call i32 @fn_str_eq(ptr %t220, ptr @.str2461) %t222 = icmp ne i32 %t221, 0 br i1 %t222, label %then219, label %ifend221 then219: @@ -17462,7 +27073,7 @@ then219: br label %ret ifend221: %t223 = load ptr, ptr %t0 - %t224 = call i32 @fn_str_eq(ptr %t223, ptr @.str786) + %t224 = call i32 @fn_str_eq(ptr %t223, ptr @.str2462) %t225 = icmp ne i32 %t224, 0 br i1 %t225, label %then222, label %ifend224 then222: @@ -17470,7 +27081,7 @@ then222: br label %ret ifend224: %t226 = load ptr, ptr %t0 - %t227 = call i32 @fn_str_eq(ptr %t226, ptr @.str787) + %t227 = call i32 @fn_str_eq(ptr %t226, ptr @.str2463) %t228 = icmp ne i32 %t227, 0 br i1 %t228, label %then225, label %ifend227 then225: @@ -17478,7 +27089,7 @@ then225: br label %ret ifend227: %t229 = load ptr, ptr %t0 - %t230 = call i32 @fn_str_eq(ptr %t229, ptr @.str788) + %t230 = call i32 @fn_str_eq(ptr %t229, ptr @.str2464) %t231 = icmp ne i32 %t230, 0 br i1 %t231, label %then228, label %ifend230 then228: @@ -17486,7 +27097,7 @@ then228: br label %ret ifend230: %t232 = load ptr, ptr %t0 - %t233 = call i32 @fn_str_eq(ptr %t232, ptr @.str789) + %t233 = call i32 @fn_str_eq(ptr %t232, ptr @.str2465) %t234 = icmp ne i32 %t233, 0 br i1 %t234, label %then231, label %ifend233 then231: @@ -17494,7 +27105,7 @@ then231: br label %ret ifend233: %t235 = load ptr, ptr %t0 - %t236 = call i32 @fn_str_eq(ptr %t235, ptr @.str790) + %t236 = call i32 @fn_str_eq(ptr %t235, ptr @.str2466) %t237 = icmp ne i32 %t236, 0 br i1 %t237, label %then234, label %ifend236 then234: @@ -17502,7 +27113,7 @@ then234: br label %ret ifend236: %t238 = load ptr, ptr %t0 - %t239 = call i32 @fn_str_eq(ptr %t238, ptr @.str791) + %t239 = call i32 @fn_str_eq(ptr %t238, ptr @.str2467) %t240 = icmp ne i32 %t239, 0 br i1 %t240, label %then237, label %ifend239 then237: @@ -17510,7 +27121,7 @@ then237: br label %ret ifend239: %t241 = load ptr, ptr %t0 - %t242 = call i32 @fn_str_eq(ptr %t241, ptr @.str792) + %t242 = call i32 @fn_str_eq(ptr %t241, ptr @.str2468) %t243 = icmp ne i32 %t242, 0 br i1 %t243, label %then240, label %ifend242 then240: @@ -17518,7 +27129,7 @@ then240: br label %ret ifend242: %t244 = load ptr, ptr %t0 - %t245 = call i32 @fn_str_eq(ptr %t244, ptr @.str793) + %t245 = call i32 @fn_str_eq(ptr %t244, ptr @.str2469) %t246 = icmp ne i32 %t245, 0 br i1 %t246, label %then243, label %ifend245 then243: @@ -17526,7 +27137,7 @@ then243: br label %ret ifend245: %t247 = load ptr, ptr %t0 - %t248 = call i32 @fn_str_eq(ptr %t247, ptr @.str794) + %t248 = call i32 @fn_str_eq(ptr %t247, ptr @.str2470) %t249 = icmp ne i32 %t248, 0 br i1 %t249, label %then246, label %ifend248 then246: @@ -17534,7 +27145,7 @@ then246: br label %ret ifend248: %t250 = load ptr, ptr %t0 - %t251 = call i32 @fn_str_eq(ptr %t250, ptr @.str795) + %t251 = call i32 @fn_str_eq(ptr %t250, ptr @.str2471) %t252 = icmp ne i32 %t251, 0 br i1 %t252, label %then249, label %ifend251 then249: @@ -17542,7 +27153,7 @@ then249: br label %ret ifend251: %t253 = load ptr, ptr %t0 - %t254 = call i32 @fn_str_eq(ptr %t253, ptr @.str796) + %t254 = call i32 @fn_str_eq(ptr %t253, ptr @.str2472) %t255 = icmp ne i32 %t254, 0 br i1 %t255, label %then252, label %ifend254 then252: @@ -17550,7 +27161,7 @@ then252: br label %ret ifend254: %t256 = load ptr, ptr %t0 - %t257 = call i32 @fn_str_eq(ptr %t256, ptr @.str797) + %t257 = call i32 @fn_str_eq(ptr %t256, ptr @.str2473) %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %then255, label %ifend257 then255: @@ -17558,7 +27169,7 @@ then255: br label %ret ifend257: %t259 = load ptr, ptr %t0 - %t260 = call i32 @fn_str_eq(ptr %t259, ptr @.str798) + %t260 = call i32 @fn_str_eq(ptr %t259, ptr @.str2474) %t261 = icmp ne i32 %t260, 0 br i1 %t261, label %then258, label %ifend260 then258: @@ -17566,7 +27177,7 @@ then258: br label %ret ifend260: %t262 = load ptr, ptr %t0 - %t263 = call i32 @fn_str_eq(ptr %t262, ptr @.str799) + %t263 = call i32 @fn_str_eq(ptr %t262, ptr @.str2475) %t264 = icmp ne i32 %t263, 0 br i1 %t264, label %then261, label %ifend263 then261: @@ -17574,7 +27185,7 @@ then261: br label %ret ifend263: %t265 = load ptr, ptr %t0 - %t266 = call i32 @fn_str_eq(ptr %t265, ptr @.str800) + %t266 = call i32 @fn_str_eq(ptr %t265, ptr @.str2476) %t267 = icmp ne i32 %t266, 0 br i1 %t267, label %then264, label %ifend266 then264: @@ -17582,7 +27193,7 @@ then264: br label %ret ifend266: %t268 = load ptr, ptr %t0 - %t269 = call i32 @fn_str_eq(ptr %t268, ptr @.str801) + %t269 = call i32 @fn_str_eq(ptr %t268, ptr @.str2477) %t270 = icmp ne i32 %t269, 0 br i1 %t270, label %then267, label %ifend269 then267: @@ -17590,7 +27201,7 @@ then267: br label %ret ifend269: %t271 = load ptr, ptr %t0 - %t272 = call i32 @fn_str_eq(ptr %t271, ptr @.str802) + %t272 = call i32 @fn_str_eq(ptr %t271, ptr @.str2478) %t273 = icmp ne i32 %t272, 0 br i1 %t273, label %then270, label %ifend272 then270: @@ -17598,7 +27209,7 @@ then270: br label %ret ifend272: %t274 = load ptr, ptr %t0 - %t275 = call i32 @fn_str_eq(ptr %t274, ptr @.str803) + %t275 = call i32 @fn_str_eq(ptr %t274, ptr @.str2479) %t276 = icmp ne i32 %t275, 0 br i1 %t276, label %then273, label %ifend275 then273: @@ -17606,7 +27217,7 @@ then273: br label %ret ifend275: %t277 = load ptr, ptr %t0 - %t278 = call i32 @fn_str_eq(ptr %t277, ptr @.str804) + %t278 = call i32 @fn_str_eq(ptr %t277, ptr @.str2480) %t279 = icmp ne i32 %t278, 0 br i1 %t279, label %then276, label %ifend278 then276: @@ -17614,7 +27225,7 @@ then276: br label %ret ifend278: %t280 = load ptr, ptr %t0 - %t281 = call i32 @fn_str_eq(ptr %t280, ptr @.str805) + %t281 = call i32 @fn_str_eq(ptr %t280, ptr @.str2481) %t282 = icmp ne i32 %t281, 0 br i1 %t282, label %then279, label %ifend281 then279: @@ -17622,7 +27233,7 @@ then279: br label %ret ifend281: %t283 = load ptr, ptr %t0 - %t284 = call i32 @fn_str_eq(ptr %t283, ptr @.str806) + %t284 = call i32 @fn_str_eq(ptr %t283, ptr @.str2482) %t285 = icmp ne i32 %t284, 0 br i1 %t285, label %then282, label %ifend284 then282: @@ -17630,7 +27241,7 @@ then282: br label %ret ifend284: %t286 = load ptr, ptr %t0 - %t287 = call i32 @fn_str_eq(ptr %t286, ptr @.str807) + %t287 = call i32 @fn_str_eq(ptr %t286, ptr @.str2483) %t288 = icmp ne i32 %t287, 0 br i1 %t288, label %then285, label %ifend287 then285: @@ -17638,7 +27249,7 @@ then285: br label %ret ifend287: %t289 = load ptr, ptr %t0 - %t290 = call i32 @fn_str_eq(ptr %t289, ptr @.str808) + %t290 = call i32 @fn_str_eq(ptr %t289, ptr @.str2484) %t291 = icmp ne i32 %t290, 0 br i1 %t291, label %then288, label %ifend290 then288: @@ -17646,7 +27257,7 @@ then288: br label %ret ifend290: %t292 = load ptr, ptr %t0 - %t293 = call i32 @fn_str_eq(ptr %t292, ptr @.str809) + %t293 = call i32 @fn_str_eq(ptr %t292, ptr @.str2485) %t294 = icmp ne i32 %t293, 0 br i1 %t294, label %then291, label %ifend293 then291: @@ -17654,7 +27265,7 @@ then291: br label %ret ifend293: %t295 = load ptr, ptr %t0 - %t296 = call i32 @fn_str_eq(ptr %t295, ptr @.str810) + %t296 = call i32 @fn_str_eq(ptr %t295, ptr @.str2486) %t297 = icmp ne i32 %t296, 0 br i1 %t297, label %then294, label %ifend296 then294: @@ -17662,7 +27273,7 @@ then294: br label %ret ifend296: %t298 = load ptr, ptr %t0 - %t299 = call i32 @fn_str_eq(ptr %t298, ptr @.str811) + %t299 = call i32 @fn_str_eq(ptr %t298, ptr @.str2487) %t300 = icmp ne i32 %t299, 0 br i1 %t300, label %then297, label %ifend299 then297: @@ -17670,7 +27281,7 @@ then297: br label %ret ifend299: %t301 = load ptr, ptr %t0 - %t302 = call i32 @fn_str_eq(ptr %t301, ptr @.str812) + %t302 = call i32 @fn_str_eq(ptr %t301, ptr @.str2488) %t303 = icmp ne i32 %t302, 0 br i1 %t303, label %then300, label %ifend302 then300: @@ -17678,7 +27289,7 @@ then300: br label %ret ifend302: %t304 = load ptr, ptr %t0 - %t305 = call i32 @fn_str_eq(ptr %t304, ptr @.str813) + %t305 = call i32 @fn_str_eq(ptr %t304, ptr @.str2489) %t306 = icmp ne i32 %t305, 0 br i1 %t306, label %then303, label %ifend305 then303: @@ -17686,7 +27297,7 @@ then303: br label %ret ifend305: %t307 = load ptr, ptr %t0 - %t308 = call i32 @fn_str_eq(ptr %t307, ptr @.str814) + %t308 = call i32 @fn_str_eq(ptr %t307, ptr @.str2490) %t309 = icmp ne i32 %t308, 0 br i1 %t309, label %then306, label %ifend308 then306: @@ -17694,7 +27305,7 @@ then306: br label %ret ifend308: %t310 = load ptr, ptr %t0 - %t311 = call i32 @fn_str_eq(ptr %t310, ptr @.str815) + %t311 = call i32 @fn_str_eq(ptr %t310, ptr @.str2491) %t312 = icmp ne i32 %t311, 0 br i1 %t312, label %then309, label %ifend311 then309: @@ -17702,7 +27313,7 @@ then309: br label %ret ifend311: %t313 = load ptr, ptr %t0 - %t314 = call i32 @fn_str_eq(ptr %t313, ptr @.str816) + %t314 = call i32 @fn_str_eq(ptr %t313, ptr @.str2492) %t315 = icmp ne i32 %t314, 0 br i1 %t315, label %then312, label %ifend314 then312: @@ -17710,7 +27321,7 @@ then312: br label %ret ifend314: %t316 = load ptr, ptr %t0 - %t317 = call i32 @fn_str_eq(ptr %t316, ptr @.str817) + %t317 = call i32 @fn_str_eq(ptr %t316, ptr @.str2493) %t318 = icmp ne i32 %t317, 0 br i1 %t318, label %then315, label %ifend317 then315: @@ -17718,7 +27329,7 @@ then315: br label %ret ifend317: %t319 = load ptr, ptr %t0 - %t320 = call i32 @fn_str_eq(ptr %t319, ptr @.str818) + %t320 = call i32 @fn_str_eq(ptr %t319, ptr @.str2494) %t321 = icmp ne i32 %t320, 0 br i1 %t321, label %then318, label %ifend320 then318: @@ -17726,7 +27337,7 @@ then318: br label %ret ifend320: %t322 = load ptr, ptr %t0 - %t323 = call i32 @fn_str_eq(ptr %t322, ptr @.str819) + %t323 = call i32 @fn_str_eq(ptr %t322, ptr @.str2495) %t324 = icmp ne i32 %t323, 0 br i1 %t324, label %then321, label %ifend323 then321: @@ -17734,7 +27345,7 @@ then321: br label %ret ifend323: %t325 = load ptr, ptr %t0 - %t326 = call i32 @fn_str_eq(ptr %t325, ptr @.str820) + %t326 = call i32 @fn_str_eq(ptr %t325, ptr @.str2496) %t327 = icmp ne i32 %t326, 0 br i1 %t327, label %then324, label %ifend326 then324: @@ -17742,7 +27353,7 @@ then324: br label %ret ifend326: %t328 = load ptr, ptr %t0 - %t329 = call i32 @fn_str_eq(ptr %t328, ptr @.str821) + %t329 = call i32 @fn_str_eq(ptr %t328, ptr @.str2497) %t330 = icmp ne i32 %t329, 0 br i1 %t330, label %then327, label %ifend329 then327: @@ -17750,7 +27361,7 @@ then327: br label %ret ifend329: %t331 = load ptr, ptr %t0 - %t332 = call i32 @fn_str_eq(ptr %t331, ptr @.str822) + %t332 = call i32 @fn_str_eq(ptr %t331, ptr @.str2498) %t333 = icmp ne i32 %t332, 0 br i1 %t333, label %then330, label %ifend332 then330: @@ -17758,7 +27369,7 @@ then330: br label %ret ifend332: %t334 = load ptr, ptr %t0 - %t335 = call i32 @fn_str_eq(ptr %t334, ptr @.str823) + %t335 = call i32 @fn_str_eq(ptr %t334, ptr @.str2499) %t336 = icmp ne i32 %t335, 0 br i1 %t336, label %then333, label %ifend335 then333: @@ -17766,7 +27377,7 @@ then333: br label %ret ifend335: %t337 = load ptr, ptr %t0 - %t338 = call i32 @fn_str_eq(ptr %t337, ptr @.str824) + %t338 = call i32 @fn_str_eq(ptr %t337, ptr @.str2500) %t339 = icmp ne i32 %t338, 0 br i1 %t339, label %then336, label %ifend338 then336: @@ -17774,7 +27385,7 @@ then336: br label %ret ifend338: %t340 = load ptr, ptr %t0 - %t341 = call i32 @fn_str_eq(ptr %t340, ptr @.str825) + %t341 = call i32 @fn_str_eq(ptr %t340, ptr @.str2501) %t342 = icmp ne i32 %t341, 0 br i1 %t342, label %then339, label %ifend341 then339: @@ -17782,7 +27393,7 @@ then339: br label %ret ifend341: %t343 = load ptr, ptr %t0 - %t344 = call i32 @fn_str_eq(ptr %t343, ptr @.str826) + %t344 = call i32 @fn_str_eq(ptr %t343, ptr @.str2502) %t345 = icmp ne i32 %t344, 0 br i1 %t345, label %then342, label %ifend344 then342: @@ -17790,7 +27401,7 @@ then342: br label %ret ifend344: %t346 = load ptr, ptr %t0 - %t347 = call i32 @fn_str_eq(ptr %t346, ptr @.str827) + %t347 = call i32 @fn_str_eq(ptr %t346, ptr @.str2503) %t348 = icmp ne i32 %t347, 0 br i1 %t348, label %then345, label %ifend347 then345: @@ -17798,7 +27409,7 @@ then345: br label %ret ifend347: %t349 = load ptr, ptr %t0 - %t350 = call i32 @fn_str_eq(ptr %t349, ptr @.str828) + %t350 = call i32 @fn_str_eq(ptr %t349, ptr @.str2504) %t351 = icmp ne i32 %t350, 0 br i1 %t351, label %then348, label %ifend350 then348: @@ -17806,7 +27417,7 @@ then348: br label %ret ifend350: %t352 = load ptr, ptr %t0 - %t353 = call i32 @fn_str_eq(ptr %t352, ptr @.str829) + %t353 = call i32 @fn_str_eq(ptr %t352, ptr @.str2505) %t354 = icmp ne i32 %t353, 0 br i1 %t354, label %then351, label %ifend353 then351: @@ -17814,7 +27425,7 @@ then351: br label %ret ifend353: %t355 = load ptr, ptr %t0 - %t356 = call i32 @fn_str_eq(ptr %t355, ptr @.str830) + %t356 = call i32 @fn_str_eq(ptr %t355, ptr @.str2506) %t357 = icmp ne i32 %t356, 0 br i1 %t357, label %then354, label %ifend356 then354: @@ -17822,7 +27433,7 @@ then354: br label %ret ifend356: %t358 = load ptr, ptr %t0 - %t359 = call i32 @fn_str_eq(ptr %t358, ptr @.str831) + %t359 = call i32 @fn_str_eq(ptr %t358, ptr @.str2507) %t360 = icmp ne i32 %t359, 0 br i1 %t360, label %then357, label %ifend359 then357: @@ -17830,7 +27441,7 @@ then357: br label %ret ifend359: %t361 = load ptr, ptr %t0 - %t362 = call i32 @fn_str_eq(ptr %t361, ptr @.str832) + %t362 = call i32 @fn_str_eq(ptr %t361, ptr @.str2508) %t363 = icmp ne i32 %t362, 0 br i1 %t363, label %then360, label %ifend362 then360: @@ -17838,7 +27449,7 @@ then360: br label %ret ifend362: %t364 = load ptr, ptr %t0 - %t365 = call i32 @fn_str_eq(ptr %t364, ptr @.str833) + %t365 = call i32 @fn_str_eq(ptr %t364, ptr @.str2509) %t366 = icmp ne i32 %t365, 0 br i1 %t366, label %then363, label %ifend365 then363: @@ -17846,7 +27457,7 @@ then363: br label %ret ifend365: %t367 = load ptr, ptr %t0 - %t368 = call i32 @fn_str_eq(ptr %t367, ptr @.str834) + %t368 = call i32 @fn_str_eq(ptr %t367, ptr @.str2510) %t369 = icmp ne i32 %t368, 0 br i1 %t369, label %then366, label %ifend368 then366: @@ -17854,7 +27465,7 @@ then366: br label %ret ifend368: %t370 = load ptr, ptr %t0 - %t371 = call i32 @fn_str_eq(ptr %t370, ptr @.str835) + %t371 = call i32 @fn_str_eq(ptr %t370, ptr @.str2511) %t372 = icmp ne i32 %t371, 0 br i1 %t372, label %then369, label %ifend371 then369: @@ -17862,7 +27473,7 @@ then369: br label %ret ifend371: %t373 = load ptr, ptr %t0 - %t374 = call i32 @fn_str_eq(ptr %t373, ptr @.str836) + %t374 = call i32 @fn_str_eq(ptr %t373, ptr @.str2512) %t375 = icmp ne i32 %t374, 0 br i1 %t375, label %then372, label %ifend374 then372: @@ -17870,7 +27481,7 @@ then372: br label %ret ifend374: %t376 = load ptr, ptr %t0 - %t377 = call i32 @fn_str_eq(ptr %t376, ptr @.str837) + %t377 = call i32 @fn_str_eq(ptr %t376, ptr @.str2513) %t378 = icmp ne i32 %t377, 0 br i1 %t378, label %then375, label %ifend377 then375: @@ -17878,7 +27489,7 @@ then375: br label %ret ifend377: %t379 = load ptr, ptr %t0 - %t380 = call i32 @fn_str_eq(ptr %t379, ptr @.str838) + %t380 = call i32 @fn_str_eq(ptr %t379, ptr @.str2514) %t381 = icmp ne i32 %t380, 0 br i1 %t381, label %then378, label %ifend380 then378: @@ -17886,7 +27497,7 @@ then378: br label %ret ifend380: %t382 = load ptr, ptr %t0 - %t383 = call i32 @fn_str_eq(ptr %t382, ptr @.str839) + %t383 = call i32 @fn_str_eq(ptr %t382, ptr @.str2515) %t384 = icmp ne i32 %t383, 0 br i1 %t384, label %then381, label %ifend383 then381: @@ -17894,7 +27505,7 @@ then381: br label %ret ifend383: %t385 = load ptr, ptr %t0 - %t386 = call i32 @fn_str_eq(ptr %t385, ptr @.str840) + %t386 = call i32 @fn_str_eq(ptr %t385, ptr @.str2516) %t387 = icmp ne i32 %t386, 0 br i1 %t387, label %then384, label %ifend386 then384: @@ -17902,7 +27513,7 @@ then384: br label %ret ifend386: %t388 = load ptr, ptr %t0 - %t389 = call i32 @fn_str_eq(ptr %t388, ptr @.str841) + %t389 = call i32 @fn_str_eq(ptr %t388, ptr @.str2517) %t390 = icmp ne i32 %t389, 0 br i1 %t390, label %then387, label %ifend389 then387: @@ -17910,7 +27521,7 @@ then387: br label %ret ifend389: %t391 = load ptr, ptr %t0 - %t392 = call i32 @fn_str_eq(ptr %t391, ptr @.str842) + %t392 = call i32 @fn_str_eq(ptr %t391, ptr @.str2518) %t393 = icmp ne i32 %t392, 0 br i1 %t393, label %then390, label %ifend392 then390: @@ -17918,7 +27529,7 @@ then390: br label %ret ifend392: %t394 = load ptr, ptr %t0 - %t395 = call i32 @fn_str_eq(ptr %t394, ptr @.str843) + %t395 = call i32 @fn_str_eq(ptr %t394, ptr @.str2519) %t396 = icmp ne i32 %t395, 0 br i1 %t396, label %then393, label %ifend395 then393: @@ -17926,7 +27537,7 @@ then393: br label %ret ifend395: %t397 = load ptr, ptr %t0 - %t398 = call i32 @fn_str_eq(ptr %t397, ptr @.str844) + %t398 = call i32 @fn_str_eq(ptr %t397, ptr @.str2520) %t399 = icmp ne i32 %t398, 0 br i1 %t399, label %then396, label %ifend398 then396: @@ -17934,7 +27545,7 @@ then396: br label %ret ifend398: %t400 = load ptr, ptr %t0 - %t401 = call i32 @fn_str_eq(ptr %t400, ptr @.str845) + %t401 = call i32 @fn_str_eq(ptr %t400, ptr @.str2521) %t402 = icmp ne i32 %t401, 0 br i1 %t402, label %then399, label %ifend401 then399: @@ -17942,7 +27553,7 @@ then399: br label %ret ifend401: %t403 = load ptr, ptr %t0 - %t404 = call i32 @fn_str_eq(ptr %t403, ptr @.str846) + %t404 = call i32 @fn_str_eq(ptr %t403, ptr @.str2522) %t405 = icmp ne i32 %t404, 0 br i1 %t405, label %then402, label %ifend404 then402: @@ -17950,7 +27561,7 @@ then402: br label %ret ifend404: %t406 = load ptr, ptr %t0 - %t407 = call i32 @fn_str_eq(ptr %t406, ptr @.str847) + %t407 = call i32 @fn_str_eq(ptr %t406, ptr @.str2523) %t408 = icmp ne i32 %t407, 0 br i1 %t408, label %then405, label %ifend407 then405: @@ -17958,7 +27569,7 @@ then405: br label %ret ifend407: %t409 = load ptr, ptr %t0 - %t410 = call i32 @fn_str_eq(ptr %t409, ptr @.str848) + %t410 = call i32 @fn_str_eq(ptr %t409, ptr @.str2524) %t411 = icmp ne i32 %t410, 0 br i1 %t411, label %then408, label %ifend410 then408: @@ -17966,7 +27577,7 @@ then408: br label %ret ifend410: %t412 = load ptr, ptr %t0 - %t413 = call i32 @fn_str_eq(ptr %t412, ptr @.str849) + %t413 = call i32 @fn_str_eq(ptr %t412, ptr @.str2525) %t414 = icmp ne i32 %t413, 0 br i1 %t414, label %then411, label %ifend413 then411: @@ -17974,7 +27585,7 @@ then411: br label %ret ifend413: %t415 = load ptr, ptr %t0 - %t416 = call i32 @fn_str_eq(ptr %t415, ptr @.str850) + %t416 = call i32 @fn_str_eq(ptr %t415, ptr @.str2526) %t417 = icmp ne i32 %t416, 0 br i1 %t417, label %then414, label %ifend416 then414: @@ -17982,7 +27593,7 @@ then414: br label %ret ifend416: %t418 = load ptr, ptr %t0 - %t419 = call i32 @fn_str_eq(ptr %t418, ptr @.str851) + %t419 = call i32 @fn_str_eq(ptr %t418, ptr @.str2527) %t420 = icmp ne i32 %t419, 0 br i1 %t420, label %then417, label %ifend419 then417: @@ -17990,7 +27601,7 @@ then417: br label %ret ifend419: %t421 = load ptr, ptr %t0 - %t422 = call i32 @fn_str_eq(ptr %t421, ptr @.str852) + %t422 = call i32 @fn_str_eq(ptr %t421, ptr @.str2528) %t423 = icmp ne i32 %t422, 0 br i1 %t423, label %then420, label %ifend422 then420: @@ -17998,7 +27609,7 @@ then420: br label %ret ifend422: %t424 = load ptr, ptr %t0 - %t425 = call i32 @fn_str_eq(ptr %t424, ptr @.str853) + %t425 = call i32 @fn_str_eq(ptr %t424, ptr @.str2529) %t426 = icmp ne i32 %t425, 0 br i1 %t426, label %then423, label %ifend425 then423: @@ -18006,7 +27617,7 @@ then423: br label %ret ifend425: %t427 = load ptr, ptr %t0 - %t428 = call i32 @fn_str_eq(ptr %t427, ptr @.str854) + %t428 = call i32 @fn_str_eq(ptr %t427, ptr @.str2530) %t429 = icmp ne i32 %t428, 0 br i1 %t429, label %then426, label %ifend428 then426: @@ -18014,7 +27625,7 @@ then426: br label %ret ifend428: %t430 = load ptr, ptr %t0 - %t431 = call i32 @fn_str_eq(ptr %t430, ptr @.str855) + %t431 = call i32 @fn_str_eq(ptr %t430, ptr @.str2531) %t432 = icmp ne i32 %t431, 0 br i1 %t432, label %then429, label %ifend431 then429: @@ -18022,7 +27633,7 @@ then429: br label %ret ifend431: %t433 = load ptr, ptr %t0 - %t434 = call i32 @fn_str_eq(ptr %t433, ptr @.str856) + %t434 = call i32 @fn_str_eq(ptr %t433, ptr @.str2532) %t435 = icmp ne i32 %t434, 0 br i1 %t435, label %then432, label %ifend434 then432: @@ -18030,7 +27641,7 @@ then432: br label %ret ifend434: %t436 = load ptr, ptr %t0 - %t437 = call i32 @fn_str_eq(ptr %t436, ptr @.str857) + %t437 = call i32 @fn_str_eq(ptr %t436, ptr @.str2533) %t438 = icmp ne i32 %t437, 0 br i1 %t438, label %then435, label %ifend437 then435: @@ -18038,7 +27649,7 @@ then435: br label %ret ifend437: %t439 = load ptr, ptr %t0 - %t440 = call i32 @fn_str_eq(ptr %t439, ptr @.str858) + %t440 = call i32 @fn_str_eq(ptr %t439, ptr @.str2534) %t441 = icmp ne i32 %t440, 0 br i1 %t441, label %then438, label %ifend440 then438: @@ -18046,7 +27657,7 @@ then438: br label %ret ifend440: %t442 = load ptr, ptr %t0 - %t443 = call i32 @fn_str_eq(ptr %t442, ptr @.str859) + %t443 = call i32 @fn_str_eq(ptr %t442, ptr @.str2535) %t444 = icmp ne i32 %t443, 0 br i1 %t444, label %then441, label %ifend443 then441: @@ -18054,7 +27665,7 @@ then441: br label %ret ifend443: %t445 = load ptr, ptr %t0 - %t446 = call i32 @fn_str_eq(ptr %t445, ptr @.str860) + %t446 = call i32 @fn_str_eq(ptr %t445, ptr @.str2536) %t447 = icmp ne i32 %t446, 0 br i1 %t447, label %then444, label %ifend446 then444: @@ -18062,7 +27673,7 @@ then444: br label %ret ifend446: %t448 = load ptr, ptr %t0 - %t449 = call i32 @fn_str_eq(ptr %t448, ptr @.str861) + %t449 = call i32 @fn_str_eq(ptr %t448, ptr @.str2537) %t450 = icmp ne i32 %t449, 0 br i1 %t450, label %then447, label %ifend449 then447: @@ -18070,7 +27681,7 @@ then447: br label %ret ifend449: %t451 = load ptr, ptr %t0 - %t452 = call i32 @fn_str_eq(ptr %t451, ptr @.str862) + %t452 = call i32 @fn_str_eq(ptr %t451, ptr @.str2538) %t453 = icmp ne i32 %t452, 0 br i1 %t453, label %then450, label %ifend452 then450: @@ -18078,7 +27689,7 @@ then450: br label %ret ifend452: %t454 = load ptr, ptr %t0 - %t455 = call i32 @fn_str_eq(ptr %t454, ptr @.str863) + %t455 = call i32 @fn_str_eq(ptr %t454, ptr @.str2539) %t456 = icmp ne i32 %t455, 0 br i1 %t456, label %then453, label %ifend455 then453: @@ -18086,7 +27697,7 @@ then453: br label %ret ifend455: %t457 = load ptr, ptr %t0 - %t458 = call i32 @fn_str_eq(ptr %t457, ptr @.str864) + %t458 = call i32 @fn_str_eq(ptr %t457, ptr @.str2540) %t459 = icmp ne i32 %t458, 0 br i1 %t459, label %then456, label %ifend458 then456: @@ -18094,7 +27705,7 @@ then456: br label %ret ifend458: %t460 = load ptr, ptr %t0 - %t461 = call i32 @fn_str_eq(ptr %t460, ptr @.str865) + %t461 = call i32 @fn_str_eq(ptr %t460, ptr @.str2541) %t462 = icmp ne i32 %t461, 0 br i1 %t462, label %then459, label %ifend461 then459: @@ -18102,7 +27713,7 @@ then459: br label %ret ifend461: %t463 = load ptr, ptr %t0 - %t464 = call i32 @fn_str_eq(ptr %t463, ptr @.str866) + %t464 = call i32 @fn_str_eq(ptr %t463, ptr @.str2542) %t465 = icmp ne i32 %t464, 0 br i1 %t465, label %then462, label %ifend464 then462: @@ -18110,7 +27721,7 @@ then462: br label %ret ifend464: %t466 = load ptr, ptr %t0 - %t467 = call i32 @fn_str_eq(ptr %t466, ptr @.str867) + %t467 = call i32 @fn_str_eq(ptr %t466, ptr @.str2543) %t468 = icmp ne i32 %t467, 0 br i1 %t468, label %then465, label %ifend467 then465: @@ -18118,7 +27729,7 @@ then465: br label %ret ifend467: %t469 = load ptr, ptr %t0 - %t470 = call i32 @fn_str_eq(ptr %t469, ptr @.str868) + %t470 = call i32 @fn_str_eq(ptr %t469, ptr @.str2544) %t471 = icmp ne i32 %t470, 0 br i1 %t471, label %then468, label %ifend470 then468: @@ -18126,7 +27737,7 @@ then468: br label %ret ifend470: %t472 = load ptr, ptr %t0 - %t473 = call i32 @fn_str_eq(ptr %t472, ptr @.str869) + %t473 = call i32 @fn_str_eq(ptr %t472, ptr @.str2545) %t474 = icmp ne i32 %t473, 0 br i1 %t474, label %then471, label %ifend473 then471: @@ -18134,7 +27745,7 @@ then471: br label %ret ifend473: %t475 = load ptr, ptr %t0 - %t476 = call i32 @fn_str_eq(ptr %t475, ptr @.str870) + %t476 = call i32 @fn_str_eq(ptr %t475, ptr @.str2546) %t477 = icmp ne i32 %t476, 0 br i1 %t477, label %then474, label %ifend476 then474: @@ -18142,7 +27753,7 @@ then474: br label %ret ifend476: %t478 = load ptr, ptr %t0 - %t479 = call i32 @fn_str_eq(ptr %t478, ptr @.str871) + %t479 = call i32 @fn_str_eq(ptr %t478, ptr @.str2547) %t480 = icmp ne i32 %t479, 0 br i1 %t480, label %then477, label %ifend479 then477: @@ -18150,7 +27761,7 @@ then477: br label %ret ifend479: %t481 = load ptr, ptr %t0 - %t482 = call i32 @fn_str_eq(ptr %t481, ptr @.str872) + %t482 = call i32 @fn_str_eq(ptr %t481, ptr @.str2548) %t483 = icmp ne i32 %t482, 0 br i1 %t483, label %then480, label %ifend482 then480: @@ -18158,7 +27769,7 @@ then480: br label %ret ifend482: %t484 = load ptr, ptr %t0 - %t485 = call i32 @fn_str_eq(ptr %t484, ptr @.str873) + %t485 = call i32 @fn_str_eq(ptr %t484, ptr @.str2549) %t486 = icmp ne i32 %t485, 0 br i1 %t486, label %then483, label %ifend485 then483: @@ -18166,7 +27777,7 @@ then483: br label %ret ifend485: %t487 = load ptr, ptr %t0 - %t488 = call i32 @fn_str_eq(ptr %t487, ptr @.str874) + %t488 = call i32 @fn_str_eq(ptr %t487, ptr @.str2550) %t489 = icmp ne i32 %t488, 0 br i1 %t489, label %then486, label %ifend488 then486: @@ -18174,7 +27785,7 @@ then486: br label %ret ifend488: %t490 = load ptr, ptr %t0 - %t491 = call i32 @fn_str_eq(ptr %t490, ptr @.str875) + %t491 = call i32 @fn_str_eq(ptr %t490, ptr @.str2551) %t492 = icmp ne i32 %t491, 0 br i1 %t492, label %then489, label %ifend491 then489: @@ -18182,7 +27793,7 @@ then489: br label %ret ifend491: %t493 = load ptr, ptr %t0 - %t494 = call i32 @fn_str_eq(ptr %t493, ptr @.str876) + %t494 = call i32 @fn_str_eq(ptr %t493, ptr @.str2552) %t495 = icmp ne i32 %t494, 0 br i1 %t495, label %then492, label %ifend494 then492: @@ -18190,7 +27801,7 @@ then492: br label %ret ifend494: %t496 = load ptr, ptr %t0 - %t497 = call i32 @fn_str_eq(ptr %t496, ptr @.str877) + %t497 = call i32 @fn_str_eq(ptr %t496, ptr @.str2553) %t498 = icmp ne i32 %t497, 0 br i1 %t498, label %then495, label %ifend497 then495: @@ -18198,7 +27809,7 @@ then495: br label %ret ifend497: %t499 = load ptr, ptr %t0 - %t500 = call i32 @fn_str_eq(ptr %t499, ptr @.str878) + %t500 = call i32 @fn_str_eq(ptr %t499, ptr @.str2554) %t501 = icmp ne i32 %t500, 0 br i1 %t501, label %then498, label %ifend500 then498: @@ -18206,7 +27817,7 @@ then498: br label %ret ifend500: %t502 = load ptr, ptr %t0 - %t503 = call i32 @fn_str_eq(ptr %t502, ptr @.str879) + %t503 = call i32 @fn_str_eq(ptr %t502, ptr @.str2555) %t504 = icmp ne i32 %t503, 0 br i1 %t504, label %then501, label %ifend503 then501: @@ -18214,7 +27825,7 @@ then501: br label %ret ifend503: %t505 = load ptr, ptr %t0 - %t506 = call i32 @fn_str_eq(ptr %t505, ptr @.str880) + %t506 = call i32 @fn_str_eq(ptr %t505, ptr @.str2556) %t507 = icmp ne i32 %t506, 0 br i1 %t507, label %then504, label %ifend506 then504: @@ -18222,7 +27833,7 @@ then504: br label %ret ifend506: %t508 = load ptr, ptr %t0 - %t509 = call i32 @fn_str_eq(ptr %t508, ptr @.str881) + %t509 = call i32 @fn_str_eq(ptr %t508, ptr @.str2557) %t510 = icmp ne i32 %t509, 0 br i1 %t510, label %then507, label %ifend509 then507: @@ -18230,7 +27841,7 @@ then507: br label %ret ifend509: %t511 = load ptr, ptr %t0 - %t512 = call i32 @fn_str_eq(ptr %t511, ptr @.str882) + %t512 = call i32 @fn_str_eq(ptr %t511, ptr @.str2558) %t513 = icmp ne i32 %t512, 0 br i1 %t513, label %then510, label %ifend512 then510: @@ -18238,7 +27849,7 @@ then510: br label %ret ifend512: %t514 = load ptr, ptr %t0 - %t515 = call i32 @fn_str_eq(ptr %t514, ptr @.str883) + %t515 = call i32 @fn_str_eq(ptr %t514, ptr @.str2559) %t516 = icmp ne i32 %t515, 0 br i1 %t516, label %then513, label %ifend515 then513: @@ -18246,7 +27857,7 @@ then513: br label %ret ifend515: %t517 = load ptr, ptr %t0 - %t518 = call i32 @fn_str_eq(ptr %t517, ptr @.str884) + %t518 = call i32 @fn_str_eq(ptr %t517, ptr @.str2560) %t519 = icmp ne i32 %t518, 0 br i1 %t519, label %then516, label %ifend518 then516: @@ -18254,7 +27865,7 @@ then516: br label %ret ifend518: %t520 = load ptr, ptr %t0 - %t521 = call i32 @fn_str_eq(ptr %t520, ptr @.str885) + %t521 = call i32 @fn_str_eq(ptr %t520, ptr @.str2561) %t522 = icmp ne i32 %t521, 0 br i1 %t522, label %then519, label %ifend521 then519: @@ -18262,7 +27873,7 @@ then519: br label %ret ifend521: %t523 = load ptr, ptr %t0 - %t524 = call i32 @fn_str_eq(ptr %t523, ptr @.str886) + %t524 = call i32 @fn_str_eq(ptr %t523, ptr @.str2562) %t525 = icmp ne i32 %t524, 0 br i1 %t525, label %then522, label %ifend524 then522: @@ -18270,7 +27881,7 @@ then522: br label %ret ifend524: %t526 = load ptr, ptr %t0 - %t527 = call i32 @fn_str_eq(ptr %t526, ptr @.str887) + %t527 = call i32 @fn_str_eq(ptr %t526, ptr @.str2563) %t528 = icmp ne i32 %t527, 0 br i1 %t528, label %then525, label %ifend527 then525: @@ -18278,7 +27889,7 @@ then525: br label %ret ifend527: %t529 = load ptr, ptr %t0 - %t530 = call i32 @fn_str_eq(ptr %t529, ptr @.str888) + %t530 = call i32 @fn_str_eq(ptr %t529, ptr @.str2564) %t531 = icmp ne i32 %t530, 0 br i1 %t531, label %then528, label %ifend530 then528: @@ -18286,7 +27897,7 @@ then528: br label %ret ifend530: %t532 = load ptr, ptr %t0 - %t533 = call i32 @fn_str_eq(ptr %t532, ptr @.str889) + %t533 = call i32 @fn_str_eq(ptr %t532, ptr @.str2565) %t534 = icmp ne i32 %t533, 0 br i1 %t534, label %then531, label %ifend533 then531: @@ -18294,7 +27905,7 @@ then531: br label %ret ifend533: %t535 = load ptr, ptr %t0 - %t536 = call i32 @fn_str_eq(ptr %t535, ptr @.str890) + %t536 = call i32 @fn_str_eq(ptr %t535, ptr @.str2566) %t537 = icmp ne i32 %t536, 0 br i1 %t537, label %then534, label %ifend536 then534: @@ -18302,7 +27913,7 @@ then534: br label %ret ifend536: %t538 = load ptr, ptr %t0 - %t539 = call i32 @fn_str_eq(ptr %t538, ptr @.str891) + %t539 = call i32 @fn_str_eq(ptr %t538, ptr @.str2567) %t540 = icmp ne i32 %t539, 0 br i1 %t540, label %then537, label %ifend539 then537: @@ -18310,7 +27921,7 @@ then537: br label %ret ifend539: %t541 = load ptr, ptr %t0 - %t542 = call i32 @fn_str_eq(ptr %t541, ptr @.str892) + %t542 = call i32 @fn_str_eq(ptr %t541, ptr @.str2568) %t543 = icmp ne i32 %t542, 0 br i1 %t543, label %then540, label %ifend542 then540: @@ -18318,7 +27929,7 @@ then540: br label %ret ifend542: %t544 = load ptr, ptr %t0 - %t545 = call i32 @fn_str_eq(ptr %t544, ptr @.str893) + %t545 = call i32 @fn_str_eq(ptr %t544, ptr @.str2569) %t546 = icmp ne i32 %t545, 0 br i1 %t546, label %then543, label %ifend545 then543: @@ -18326,7 +27937,7 @@ then543: br label %ret ifend545: %t547 = load ptr, ptr %t0 - %t548 = call i32 @fn_str_eq(ptr %t547, ptr @.str894) + %t548 = call i32 @fn_str_eq(ptr %t547, ptr @.str2570) %t549 = icmp ne i32 %t548, 0 br i1 %t549, label %then546, label %ifend548 then546: @@ -18334,7 +27945,7 @@ then546: br label %ret ifend548: %t550 = load ptr, ptr %t0 - %t551 = call i32 @fn_str_eq(ptr %t550, ptr @.str895) + %t551 = call i32 @fn_str_eq(ptr %t550, ptr @.str2571) %t552 = icmp ne i32 %t551, 0 br i1 %t552, label %then549, label %ifend551 then549: @@ -18342,7 +27953,7 @@ then549: br label %ret ifend551: %t553 = load ptr, ptr %t0 - %t554 = call i32 @fn_str_eq(ptr %t553, ptr @.str896) + %t554 = call i32 @fn_str_eq(ptr %t553, ptr @.str2572) %t555 = icmp ne i32 %t554, 0 br i1 %t555, label %then552, label %ifend554 then552: @@ -18350,7 +27961,7 @@ then552: br label %ret ifend554: %t556 = load ptr, ptr %t0 - %t557 = call i32 @fn_str_eq(ptr %t556, ptr @.str897) + %t557 = call i32 @fn_str_eq(ptr %t556, ptr @.str2573) %t558 = icmp ne i32 %t557, 0 br i1 %t558, label %then555, label %ifend557 then555: @@ -18358,7 +27969,7 @@ then555: br label %ret ifend557: %t559 = load ptr, ptr %t0 - %t560 = call i32 @fn_str_eq(ptr %t559, ptr @.str898) + %t560 = call i32 @fn_str_eq(ptr %t559, ptr @.str2574) %t561 = icmp ne i32 %t560, 0 br i1 %t561, label %then558, label %ifend560 then558: @@ -18366,7 +27977,7 @@ then558: br label %ret ifend560: %t562 = load ptr, ptr %t0 - %t563 = call i32 @fn_str_eq(ptr %t562, ptr @.str899) + %t563 = call i32 @fn_str_eq(ptr %t562, ptr @.str2575) %t564 = icmp ne i32 %t563, 0 br i1 %t564, label %then561, label %ifend563 then561: @@ -18374,7 +27985,7 @@ then561: br label %ret ifend563: %t565 = load ptr, ptr %t0 - %t566 = call i32 @fn_str_eq(ptr %t565, ptr @.str900) + %t566 = call i32 @fn_str_eq(ptr %t565, ptr @.str2576) %t567 = icmp ne i32 %t566, 0 br i1 %t567, label %then564, label %ifend566 then564: @@ -18382,7 +27993,7 @@ then564: br label %ret ifend566: %t568 = load ptr, ptr %t0 - %t569 = call i32 @fn_str_eq(ptr %t568, ptr @.str901) + %t569 = call i32 @fn_str_eq(ptr %t568, ptr @.str2577) %t570 = icmp ne i32 %t569, 0 br i1 %t570, label %then567, label %ifend569 then567: @@ -18390,7 +28001,7 @@ then567: br label %ret ifend569: %t571 = load ptr, ptr %t0 - %t572 = call i32 @fn_str_eq(ptr %t571, ptr @.str902) + %t572 = call i32 @fn_str_eq(ptr %t571, ptr @.str2578) %t573 = icmp ne i32 %t572, 0 br i1 %t573, label %then570, label %ifend572 then570: @@ -18398,7 +28009,7 @@ then570: br label %ret ifend572: %t574 = load ptr, ptr %t0 - %t575 = call i32 @fn_str_eq(ptr %t574, ptr @.str903) + %t575 = call i32 @fn_str_eq(ptr %t574, ptr @.str2579) %t576 = icmp ne i32 %t575, 0 br i1 %t576, label %then573, label %ifend575 then573: @@ -18406,7 +28017,7 @@ then573: br label %ret ifend575: %t577 = load ptr, ptr %t0 - %t578 = call i32 @fn_str_eq(ptr %t577, ptr @.str904) + %t578 = call i32 @fn_str_eq(ptr %t577, ptr @.str2580) %t579 = icmp ne i32 %t578, 0 br i1 %t579, label %then576, label %ifend578 then576: @@ -18414,7 +28025,7 @@ then576: br label %ret ifend578: %t580 = load ptr, ptr %t0 - %t581 = call i32 @fn_str_eq(ptr %t580, ptr @.str905) + %t581 = call i32 @fn_str_eq(ptr %t580, ptr @.str2581) %t582 = icmp ne i32 %t581, 0 br i1 %t582, label %then579, label %ifend581 then579: @@ -18422,7 +28033,7 @@ then579: br label %ret ifend581: %t583 = load ptr, ptr %t0 - %t584 = call i32 @fn_str_eq(ptr %t583, ptr @.str906) + %t584 = call i32 @fn_str_eq(ptr %t583, ptr @.str2582) %t585 = icmp ne i32 %t584, 0 br i1 %t585, label %then582, label %ifend584 then582: @@ -18430,7 +28041,7 @@ then582: br label %ret ifend584: %t586 = load ptr, ptr %t0 - %t587 = call i32 @fn_str_eq(ptr %t586, ptr @.str907) + %t587 = call i32 @fn_str_eq(ptr %t586, ptr @.str2583) %t588 = icmp ne i32 %t587, 0 br i1 %t588, label %then585, label %ifend587 then585: @@ -18438,7 +28049,7 @@ then585: br label %ret ifend587: %t589 = load ptr, ptr %t0 - %t590 = call i32 @fn_str_eq(ptr %t589, ptr @.str908) + %t590 = call i32 @fn_str_eq(ptr %t589, ptr @.str2584) %t591 = icmp ne i32 %t590, 0 br i1 %t591, label %then588, label %ifend590 then588: @@ -18446,7 +28057,7 @@ then588: br label %ret ifend590: %t592 = load ptr, ptr %t0 - %t593 = call i32 @fn_str_eq(ptr %t592, ptr @.str909) + %t593 = call i32 @fn_str_eq(ptr %t592, ptr @.str2585) %t594 = icmp ne i32 %t593, 0 br i1 %t594, label %then591, label %ifend593 then591: @@ -18454,7 +28065,7 @@ then591: br label %ret ifend593: %t595 = load ptr, ptr %t0 - %t596 = call i32 @fn_str_eq(ptr %t595, ptr @.str910) + %t596 = call i32 @fn_str_eq(ptr %t595, ptr @.str2586) %t597 = icmp ne i32 %t596, 0 br i1 %t597, label %then594, label %ifend596 then594: @@ -18462,7 +28073,7 @@ then594: br label %ret ifend596: %t598 = load ptr, ptr %t0 - %t599 = call i32 @fn_str_eq(ptr %t598, ptr @.str911) + %t599 = call i32 @fn_str_eq(ptr %t598, ptr @.str2587) %t600 = icmp ne i32 %t599, 0 br i1 %t600, label %then597, label %ifend599 then597: @@ -18470,7 +28081,7 @@ then597: br label %ret ifend599: %t601 = load ptr, ptr %t0 - %t602 = call i32 @fn_str_eq(ptr %t601, ptr @.str912) + %t602 = call i32 @fn_str_eq(ptr %t601, ptr @.str2588) %t603 = icmp ne i32 %t602, 0 br i1 %t603, label %then600, label %ifend602 then600: @@ -18478,7 +28089,7 @@ then600: br label %ret ifend602: %t604 = load ptr, ptr %t0 - %t605 = call i32 @fn_str_eq(ptr %t604, ptr @.str913) + %t605 = call i32 @fn_str_eq(ptr %t604, ptr @.str2589) %t606 = icmp ne i32 %t605, 0 br i1 %t606, label %then603, label %ifend605 then603: @@ -18486,7 +28097,7 @@ then603: br label %ret ifend605: %t607 = load ptr, ptr %t0 - %t608 = call i32 @fn_str_eq(ptr %t607, ptr @.str914) + %t608 = call i32 @fn_str_eq(ptr %t607, ptr @.str2590) %t609 = icmp ne i32 %t608, 0 br i1 %t609, label %then606, label %ifend608 then606: @@ -18494,7 +28105,7 @@ then606: br label %ret ifend608: %t610 = load ptr, ptr %t0 - %t611 = call i32 @fn_str_eq(ptr %t610, ptr @.str915) + %t611 = call i32 @fn_str_eq(ptr %t610, ptr @.str2591) %t612 = icmp ne i32 %t611, 0 br i1 %t612, label %then609, label %ifend611 then609: @@ -18502,7 +28113,7 @@ then609: br label %ret ifend611: %t613 = load ptr, ptr %t0 - %t614 = call i32 @fn_str_eq(ptr %t613, ptr @.str916) + %t614 = call i32 @fn_str_eq(ptr %t613, ptr @.str2592) %t615 = icmp ne i32 %t614, 0 br i1 %t615, label %then612, label %ifend614 then612: @@ -18510,7 +28121,7 @@ then612: br label %ret ifend614: %t616 = load ptr, ptr %t0 - %t617 = call i32 @fn_str_eq(ptr %t616, ptr @.str917) + %t617 = call i32 @fn_str_eq(ptr %t616, ptr @.str2593) %t618 = icmp ne i32 %t617, 0 br i1 %t618, label %then615, label %ifend617 then615: @@ -18518,7 +28129,7 @@ then615: br label %ret ifend617: %t619 = load ptr, ptr %t0 - %t620 = call i32 @fn_str_eq(ptr %t619, ptr @.str918) + %t620 = call i32 @fn_str_eq(ptr %t619, ptr @.str2594) %t621 = icmp ne i32 %t620, 0 br i1 %t621, label %then618, label %ifend620 then618: @@ -18526,7 +28137,7 @@ then618: br label %ret ifend620: %t622 = load ptr, ptr %t0 - %t623 = call i32 @fn_str_eq(ptr %t622, ptr @.str919) + %t623 = call i32 @fn_str_eq(ptr %t622, ptr @.str2595) %t624 = icmp ne i32 %t623, 0 br i1 %t624, label %then621, label %ifend623 then621: @@ -18534,7 +28145,7 @@ then621: br label %ret ifend623: %t625 = load ptr, ptr %t0 - %t626 = call i32 @fn_str_eq(ptr %t625, ptr @.str920) + %t626 = call i32 @fn_str_eq(ptr %t625, ptr @.str2596) %t627 = icmp ne i32 %t626, 0 br i1 %t627, label %then624, label %ifend626 then624: @@ -18542,7 +28153,7 @@ then624: br label %ret ifend626: %t628 = load ptr, ptr %t0 - %t629 = call i32 @fn_str_eq(ptr %t628, ptr @.str921) + %t629 = call i32 @fn_str_eq(ptr %t628, ptr @.str2597) %t630 = icmp ne i32 %t629, 0 br i1 %t630, label %then627, label %ifend629 then627: @@ -18550,7 +28161,7 @@ then627: br label %ret ifend629: %t631 = load ptr, ptr %t0 - %t632 = call i32 @fn_str_eq(ptr %t631, ptr @.str922) + %t632 = call i32 @fn_str_eq(ptr %t631, ptr @.str2598) %t633 = icmp ne i32 %t632, 0 br i1 %t633, label %then630, label %ifend632 then630: @@ -18558,7 +28169,7 @@ then630: br label %ret ifend632: %t634 = load ptr, ptr %t0 - %t635 = call i32 @fn_str_eq(ptr %t634, ptr @.str923) + %t635 = call i32 @fn_str_eq(ptr %t634, ptr @.str2599) %t636 = icmp ne i32 %t635, 0 br i1 %t636, label %then633, label %ifend635 then633: @@ -18566,7 +28177,7 @@ then633: br label %ret ifend635: %t637 = load ptr, ptr %t0 - %t638 = call i32 @fn_str_eq(ptr %t637, ptr @.str924) + %t638 = call i32 @fn_str_eq(ptr %t637, ptr @.str2600) %t639 = icmp ne i32 %t638, 0 br i1 %t639, label %then636, label %ifend638 then636: @@ -18574,7 +28185,7 @@ then636: br label %ret ifend638: %t640 = load ptr, ptr %t0 - %t641 = call i32 @fn_str_eq(ptr %t640, ptr @.str925) + %t641 = call i32 @fn_str_eq(ptr %t640, ptr @.str2601) %t642 = icmp ne i32 %t641, 0 br i1 %t642, label %then639, label %ifend641 then639: @@ -18582,7 +28193,7 @@ then639: br label %ret ifend641: %t643 = load ptr, ptr %t0 - %t644 = call i32 @fn_str_eq(ptr %t643, ptr @.str926) + %t644 = call i32 @fn_str_eq(ptr %t643, ptr @.str2602) %t645 = icmp ne i32 %t644, 0 br i1 %t645, label %then642, label %ifend644 then642: @@ -18590,7 +28201,7 @@ then642: br label %ret ifend644: %t646 = load ptr, ptr %t0 - %t647 = call i32 @fn_str_eq(ptr %t646, ptr @.str927) + %t647 = call i32 @fn_str_eq(ptr %t646, ptr @.str2603) %t648 = icmp ne i32 %t647, 0 br i1 %t648, label %then645, label %ifend647 then645: @@ -18598,7 +28209,7 @@ then645: br label %ret ifend647: %t649 = load ptr, ptr %t0 - %t650 = call i32 @fn_str_eq(ptr %t649, ptr @.str928) + %t650 = call i32 @fn_str_eq(ptr %t649, ptr @.str2604) %t651 = icmp ne i32 %t650, 0 br i1 %t651, label %then648, label %ifend650 then648: @@ -18606,7 +28217,7 @@ then648: br label %ret ifend650: %t652 = load ptr, ptr %t0 - %t653 = call i32 @fn_str_eq(ptr %t652, ptr @.str929) + %t653 = call i32 @fn_str_eq(ptr %t652, ptr @.str2605) %t654 = icmp ne i32 %t653, 0 br i1 %t654, label %then651, label %ifend653 then651: @@ -18614,7 +28225,7 @@ then651: br label %ret ifend653: %t655 = load ptr, ptr %t0 - %t656 = call i32 @fn_str_eq(ptr %t655, ptr @.str930) + %t656 = call i32 @fn_str_eq(ptr %t655, ptr @.str2606) %t657 = icmp ne i32 %t656, 0 br i1 %t657, label %then654, label %ifend656 then654: @@ -18622,7 +28233,7 @@ then654: br label %ret ifend656: %t658 = load ptr, ptr %t0 - %t659 = call i32 @fn_str_eq(ptr %t658, ptr @.str931) + %t659 = call i32 @fn_str_eq(ptr %t658, ptr @.str2607) %t660 = icmp ne i32 %t659, 0 br i1 %t660, label %then657, label %ifend659 then657: @@ -18630,7 +28241,7 @@ then657: br label %ret ifend659: %t661 = load ptr, ptr %t0 - %t662 = call i32 @fn_str_eq(ptr %t661, ptr @.str932) + %t662 = call i32 @fn_str_eq(ptr %t661, ptr @.str2608) %t663 = icmp ne i32 %t662, 0 br i1 %t663, label %then660, label %ifend662 then660: @@ -18652,13 +28263,13 @@ entry: %t5 = alloca ptr store ptr %arg_llt, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call ptr @fn_str_concat(ptr @.str933, ptr %t1) - %t3 = call ptr @fn_str_concat(ptr %t2, ptr @.str934) + %t2 = call ptr @fn_str_concat(ptr @.str2609, ptr %t1) + %t3 = call ptr @fn_str_concat(ptr %t2, ptr @.str2610) %t4 = call ptr @fn_emit_bind(ptr %t3) store ptr %t4, ptr %t5 %t6 = load ptr, ptr %t5 - %t7 = call ptr @fn_str_concat(ptr @.str935, ptr %t6) - %t8 = call ptr @fn_str_concat(ptr %t7, ptr @.str936) + %t7 = call ptr @fn_str_concat(ptr @.str2611, ptr %t6) + %t8 = call ptr @fn_str_concat(ptr %t7, ptr @.str2612) %t9 = call ptr @fn_emit_bind(ptr %t8) store ptr %t9, ptr %retval br label %ret @@ -18691,7 +28302,7 @@ entry: %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str937) + call void @fn_perr(ptr @.str2613) br label %ifend2 ifend2: %t8 = load ptr, ptr %t0 @@ -18701,8 +28312,8 @@ ifend2: %t12 = call ptr @fn_emit_sizeof(ptr %t11) store ptr %t12, ptr %t13 %t14 = load ptr, ptr %t13 - %t15 = call ptr @fn_str_concat(ptr @.str938, ptr %t14) - %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str939) + %t15 = call ptr @fn_str_concat(ptr @.str2614, ptr %t14) + %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str2615) %t17 = call ptr @fn_emit_bind(ptr %t16) store ptr %t17, ptr %t18 store i32 0, ptr %t19 @@ -18730,32 +28341,32 @@ wbody4: store ptr %t36, ptr %t37 %t38 = call ptr @fn_nreg() store ptr %t38, ptr %t39 - call void @fn_emit(ptr @.str940) + call void @fn_emit(ptr @.str2616) %t40 = load ptr, ptr %t39 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str941) + call void @fn_emit(ptr @.str2617) %t41 = load ptr, ptr %t10 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str942) + call void @fn_emit(ptr @.str2618) %t42 = load ptr, ptr %t18 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str943) + call void @fn_emit(ptr @.str2619) %t43 = load i32, ptr %t19 %t44 = call ptr @fn_itoa(i32 %t43) call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str944) + call void @fn_emit(ptr @.str2620) %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 @.str945, ptr %t50 + store ptr @.str2621, ptr %t50 %t51 = load ptr, ptr %t49 - %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str946) + %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str2622) %t53 = icmp ne i32 %t52, 0 br i1 %t53, label %then6, label %ifend8 then6: - store ptr @.str947, ptr %t50 + store ptr @.str2623, ptr %t50 br label %ifend8 ifend8: %t54 = load ptr, ptr %t37 @@ -18777,16 +28388,16 @@ then9: store ptr %t67, ptr %t50 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str948) + call void @fn_emit(ptr @.str2624) %t68 = load ptr, ptr %t49 call void @fn_emit(ptr %t68) - call void @fn_emit(ptr @.str949) + call void @fn_emit(ptr @.str2625) %t69 = load ptr, ptr %t50 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str950) + call void @fn_emit(ptr @.str2626) %t70 = load ptr, ptr %t39 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str951) + call void @fn_emit(ptr @.str2627) %t71 = load i32, ptr %t19 %t72 = add i32 %t71, 1 store i32 %t72, ptr %t19 @@ -18812,52 +28423,52 @@ entry: %t14 = alloca ptr %t19 = alloca ptr store ptr %arg_ty, ptr %t0 - %t1 = call ptr @fn_emit_sizeof(ptr @.str952) + %t1 = call ptr @fn_emit_sizeof(ptr @.str2628) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t2 - %t4 = call ptr @fn_str_concat(ptr @.str953, ptr %t3) - %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str954) + %t4 = call ptr @fn_str_concat(ptr @.str2629, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str2630) %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 @.str955) + call void @fn_emit(ptr @.str2631) %t10 = load ptr, ptr %t9 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str956) + call void @fn_emit(ptr @.str2632) %t11 = load ptr, ptr %t7 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str957) - call void @fn_emit(ptr @.str958) + call void @fn_emit(ptr @.str2633) + call void @fn_emit(ptr @.str2634) %t12 = load ptr, ptr %t9 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str959) + call void @fn_emit(ptr @.str2635) %t13 = call ptr @fn_nreg() store ptr %t13, ptr %t14 - call void @fn_emit(ptr @.str960) + call void @fn_emit(ptr @.str2636) %t15 = load ptr, ptr %t14 call void @fn_emit(ptr %t15) - call void @fn_emit(ptr @.str961) + call void @fn_emit(ptr @.str2637) %t16 = load ptr, ptr %t7 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str962) - call void @fn_emit(ptr @.str963) + call void @fn_emit(ptr @.str2638) + call void @fn_emit(ptr @.str2639) %t17 = load ptr, ptr %t14 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str964) + call void @fn_emit(ptr @.str2640) %t18 = call ptr @fn_nreg() store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str965) + call void @fn_emit(ptr @.str2641) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str966) + call void @fn_emit(ptr @.str2642) %t21 = load ptr, ptr %t7 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str967) - call void @fn_emit(ptr @.str968) + call void @fn_emit(ptr @.str2643) + call void @fn_emit(ptr @.str2644) %t22 = load ptr, ptr %t19 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str969) + call void @fn_emit(ptr @.str2645) %t23 = load ptr, ptr %t7 %t24 = load ptr, ptr %t0 %t25 = call ptr @fn_val(ptr %t23, ptr %t24) @@ -18878,17 +28489,17 @@ entry: store i32 %arg_i, ptr %t1 %t2 = call ptr @fn_nreg() store ptr %t2, ptr %t3 - call void @fn_emit(ptr @.str970) + call void @fn_emit(ptr @.str2646) %t4 = load ptr, ptr %t3 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str971) + call void @fn_emit(ptr @.str2647) %t5 = load ptr, ptr %t0 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str972) + call void @fn_emit(ptr @.str2648) %t6 = load i32, ptr %t1 %t7 = call ptr @fn_itoa(i32 %t6) call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str973) + call void @fn_emit(ptr @.str2649) %t8 = load ptr, ptr %t3 store ptr %t8, ptr %retval br label %ret @@ -18927,24 +28538,24 @@ then0: %t18 = call ptr @fn_slice_field(ptr %t17, i32 1) store ptr %t18, ptr %t19 %t20 = load ptr, ptr %t19 - %t21 = call ptr @fn_str_concat(ptr @.str974, ptr %t20) + %t21 = call ptr @fn_str_concat(ptr @.str2650, ptr %t20) %t22 = call ptr @fn_emit_bind(ptr %t21) - %t23 = call ptr @fn_val(ptr %t22, ptr @.str975) + %t23 = call ptr @fn_val(ptr %t22, ptr @.str2651) store ptr %t23, ptr %retval br label %ret ifend2: %t24 = load ptr, ptr %t9 %t25 = getelementptr inbounds %Cmp_Val, ptr %t24, i32 0, i32 0 %t26 = load ptr, ptr %t25 - %t27 = call ptr @fn_str_concat(ptr @.str976, ptr %t26) - %t28 = call ptr @fn_str_concat(ptr %t27, ptr @.str977) + %t27 = call ptr @fn_str_concat(ptr @.str2652, ptr %t26) + %t28 = call ptr @fn_str_concat(ptr %t27, ptr @.str2653) %t29 = call ptr @fn_emit_bind(ptr %t28) store ptr %t29, ptr %t30 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_str_concat(ptr @.str978, ptr %t31) - %t33 = call ptr @fn_str_concat(ptr %t32, ptr @.str979) + %t32 = call ptr @fn_str_concat(ptr @.str2654, ptr %t31) + %t33 = call ptr @fn_str_concat(ptr %t32, ptr @.str2655) %t34 = call ptr @fn_emit_bind(ptr %t33) - %t35 = call ptr @fn_val(ptr %t34, ptr @.str980) + %t35 = call ptr @fn_val(ptr %t34, ptr @.str2656) store ptr %t35, ptr %retval br label %ret ret: @@ -19012,50 +28623,50 @@ 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_str_concat(ptr @.str981, ptr %t31) + %t32 = call ptr @fn_str_concat(ptr @.str2657, ptr %t31) %t33 = call ptr @fn_emit_bind(ptr %t32) store ptr %t33, ptr %t34 %t35 = load ptr, ptr %t27 - %t36 = call ptr @fn_str_concat(ptr @.str982, ptr %t35) + %t36 = call ptr @fn_str_concat(ptr @.str2658, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) store ptr %t37, ptr %t38 %t39 = load ptr, ptr %t34 - %t40 = call ptr @fn_str_concat(ptr @.str983, ptr %t39) - %t41 = call ptr @fn_str_concat(ptr %t40, ptr @.str984) + %t40 = call ptr @fn_str_concat(ptr @.str2659, ptr %t39) + %t41 = call ptr @fn_str_concat(ptr %t40, ptr @.str2660) %t42 = load ptr, ptr %t38 %t43 = call ptr @fn_str_concat(ptr %t41, ptr %t42) %t44 = call ptr @fn_emit_bind(ptr %t43) store ptr %t44, ptr %t45 - %t46 = call ptr @fn_lbl(ptr @.str985) + %t46 = call ptr @fn_lbl(ptr @.str2661) store ptr %t46, ptr %t47 - %t48 = call ptr @fn_lbl(ptr @.str986) + %t48 = call ptr @fn_lbl(ptr @.str2662) store ptr %t48, ptr %t49 - call void @fn_emit(ptr @.str987) + call void @fn_emit(ptr @.str2663) %t50 = load ptr, ptr %t45 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str988) + call void @fn_emit(ptr @.str2664) %t51 = load ptr, ptr %t47 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str989) + call void @fn_emit(ptr @.str2665) %t52 = load ptr, ptr %t49 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str990) + call void @fn_emit(ptr @.str2666) %t53 = load ptr, ptr %t47 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str991) + call void @fn_emit(ptr @.str2667) %t54 = load ptr, ptr %t38 - %t55 = call ptr @fn_str_concat(ptr @.str992, ptr %t54) - %t56 = call ptr @fn_str_concat(ptr %t55, ptr @.str993) + %t55 = call ptr @fn_str_concat(ptr @.str2668, ptr %t54) + %t56 = call ptr @fn_str_concat(ptr %t55, ptr @.str2669) %t57 = call ptr @fn_emit_bind(ptr %t56) store ptr %t57, ptr %t58 %t59 = load ptr, ptr %t38 - %t60 = call ptr @fn_str_concat(ptr @.str994, ptr %t59) - %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str995) + %t60 = call ptr @fn_str_concat(ptr @.str2670, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str2671) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 %t64 = load ptr, ptr %t63 - %t65 = call ptr @fn_str_concat(ptr @.str996, ptr %t64) - %t66 = call ptr @fn_str_concat(ptr %t65, ptr @.str997) + %t65 = call ptr @fn_str_concat(ptr @.str2672, ptr %t64) + %t66 = call ptr @fn_str_concat(ptr %t65, ptr @.str2673) %t67 = load ptr, ptr %t58 %t68 = call ptr @fn_str_concat(ptr %t66, ptr %t67) %t69 = call ptr @fn_emit_bind(ptr %t68) @@ -19064,50 +28675,50 @@ entry: %t72 = call ptr @fn_emit_sizeof(ptr %t71) store ptr %t72, ptr %t73 %t74 = load ptr, ptr %t70 - %t75 = call ptr @fn_str_concat(ptr @.str998, ptr %t74) - %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str999) + %t75 = call ptr @fn_str_concat(ptr @.str2674, ptr %t74) + %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str2675) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 %t79 = load ptr, ptr %t78 - %t80 = call ptr @fn_str_concat(ptr @.str1000, ptr %t79) - %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str1001) + %t80 = call ptr @fn_str_concat(ptr @.str2676, ptr %t79) + %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str2677) %t82 = load ptr, ptr %t73 %t83 = call ptr @fn_str_concat(ptr %t81, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 %t86 = load ptr, ptr %t30 - %t87 = call ptr @fn_str_concat(ptr @.str1002, ptr %t86) + %t87 = call ptr @fn_str_concat(ptr @.str2678, ptr %t86) %t88 = call ptr @fn_emit_bind(ptr %t87) store ptr %t88, ptr %t89 %t90 = load ptr, ptr %t89 - %t91 = call ptr @fn_str_concat(ptr @.str1003, ptr %t90) - %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str1004) + %t91 = call ptr @fn_str_concat(ptr @.str2679, ptr %t90) + %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str2680) %t93 = load ptr, ptr %t85 %t94 = call ptr @fn_str_concat(ptr %t92, ptr %t93) - %t95 = call ptr @fn_str_concat(ptr %t94, ptr @.str1005) + %t95 = call ptr @fn_str_concat(ptr %t94, ptr @.str2681) %t96 = call ptr @fn_emit_bind(ptr %t95) store ptr %t96, ptr %t97 - call void @fn_emit(ptr @.str1006) + call void @fn_emit(ptr @.str2682) %t98 = load ptr, ptr %t97 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str1007) + call void @fn_emit(ptr @.str2683) %t99 = load ptr, ptr %t30 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str1008) - call void @fn_emit(ptr @.str1009) + call void @fn_emit(ptr @.str2684) + call void @fn_emit(ptr @.str2685) %t100 = load ptr, ptr %t70 call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str1010) + call void @fn_emit(ptr @.str2686) %t101 = load ptr, ptr %t27 call void @fn_emit(ptr %t101) - call void @fn_emit(ptr @.str1011) - call void @fn_emit(ptr @.str1012) + call void @fn_emit(ptr @.str2687) + call void @fn_emit(ptr @.str2688) %t102 = load ptr, ptr %t49 call void @fn_emit(ptr %t102) - call void @fn_emit(ptr @.str1013) + call void @fn_emit(ptr @.str2689) %t103 = load ptr, ptr %t49 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str1014) + call void @fn_emit(ptr @.str2690) %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Cmp_Node, ptr %t104, i32 0, i32 7 %t106 = load ptr, ptr %t105 @@ -19118,49 +28729,49 @@ entry: %t111 = call ptr @fn_emit_expr(ptr %t110) store ptr %t111, ptr %t112 %t113 = load ptr, ptr %t30 - %t114 = call ptr @fn_str_concat(ptr @.str1015, ptr %t113) + %t114 = call ptr @fn_str_concat(ptr @.str2691, 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 @.str1016) + call void @fn_emit(ptr @.str2692) %t119 = load ptr, ptr %t118 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str1017) + call void @fn_emit(ptr @.str2693) %t120 = load ptr, ptr %t17 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str1018) + call void @fn_emit(ptr @.str2694) %t121 = load ptr, ptr %t116 call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str1019) + call void @fn_emit(ptr @.str2695) %t122 = load ptr, ptr %t34 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str1020) - call void @fn_emit(ptr @.str1021) + call void @fn_emit(ptr @.str2696) + call void @fn_emit(ptr @.str2697) %t123 = load ptr, ptr %t17 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str1022) + call void @fn_emit(ptr @.str2698) %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 @.str1023) + call void @fn_emit(ptr @.str2699) %t127 = load ptr, ptr %t118 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str1024) + call void @fn_emit(ptr @.str2700) %t128 = load ptr, ptr %t34 - %t129 = call ptr @fn_str_concat(ptr @.str1025, ptr %t128) - %t130 = call ptr @fn_str_concat(ptr %t129, ptr @.str1026) + %t129 = call ptr @fn_str_concat(ptr @.str2701, ptr %t128) + %t130 = call ptr @fn_str_concat(ptr %t129, ptr @.str2702) %t131 = call ptr @fn_emit_bind(ptr %t130) store ptr %t131, ptr %t132 - call void @fn_emit(ptr @.str1027) + call void @fn_emit(ptr @.str2703) %t133 = load ptr, ptr %t132 call void @fn_emit(ptr %t133) - call void @fn_emit(ptr @.str1028) + call void @fn_emit(ptr @.str2704) %t134 = load ptr, ptr %t24 call void @fn_emit(ptr %t134) - call void @fn_emit(ptr @.str1029) - %t135 = call ptr @fn_val(ptr @.str1030, ptr @.str1031) + call void @fn_emit(ptr @.str2705) + %t135 = call ptr @fn_val(ptr @.str2706, ptr @.str2707) store ptr %t135, ptr %retval br label %ret ret: @@ -19178,8 +28789,8 @@ entry: store ptr %arg_ty, ptr %t1 %t2 = load ptr, ptr %t1 %t3 = call ptr @fn_llty(ptr %t2) - %t4 = call ptr @fn_str_concat(ptr @.str1032, ptr %t3) - %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str1033) + %t4 = call ptr @fn_str_concat(ptr @.str2708, ptr %t3) + %t5 = call ptr @fn_str_concat(ptr %t4, ptr @.str2709) %t6 = load ptr, ptr %t0 %t7 = call ptr @fn_str_concat(ptr %t5, ptr %t6) %t8 = call ptr @fn_emit_bind(ptr %t7) @@ -19208,7 +28819,7 @@ entry: %t49 = alloca ptr %t54 = alloca ptr store ptr %arg_e, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str1034) + %t1 = call ptr @fn_emit_alloca(ptr @.str2710) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 4 @@ -19218,60 +28829,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_str_concat(ptr @.str1035, ptr %t10) - %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str1036) + %t11 = call ptr @fn_str_concat(ptr @.str2711, ptr %t10) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str2712) %t13 = call ptr @fn_emit_bind(ptr %t12) store ptr %t13, ptr %t14 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_str_concat(ptr @.str1037, ptr %t15) - %t17 = call ptr @fn_str_concat(ptr %t16, ptr @.str1038) + %t16 = call ptr @fn_str_concat(ptr @.str2713, ptr %t15) + %t17 = call ptr @fn_str_concat(ptr %t16, ptr @.str2714) %t18 = call ptr @fn_emit_bind(ptr %t17) store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str1039) + call void @fn_emit(ptr @.str2715) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1040) + call void @fn_emit(ptr @.str2716) %t21 = load ptr, ptr %t2 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1041) - %t22 = call ptr @fn_lbl(ptr @.str1042) + call void @fn_emit(ptr @.str2717) + %t22 = call ptr @fn_lbl(ptr @.str2718) store ptr %t22, ptr %t23 - %t24 = call ptr @fn_lbl(ptr @.str1043) + %t24 = call ptr @fn_lbl(ptr @.str2719) 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_str_eq(ptr %t28, ptr @.str1044) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str2720) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then0, label %else1 then0: - call void @fn_emit(ptr @.str1045) + call void @fn_emit(ptr @.str2721) %t31 = load ptr, ptr %t14 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1046) + call void @fn_emit(ptr @.str2722) %t32 = load ptr, ptr %t23 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str1047) + call void @fn_emit(ptr @.str2723) %t33 = load ptr, ptr %t25 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str1048) + call void @fn_emit(ptr @.str2724) br label %ifend2 else1: - call void @fn_emit(ptr @.str1049) + call void @fn_emit(ptr @.str2725) %t34 = load ptr, ptr %t14 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1050) + call void @fn_emit(ptr @.str2726) %t35 = load ptr, ptr %t25 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1051) + call void @fn_emit(ptr @.str2727) %t36 = load ptr, ptr %t23 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str1052) + call void @fn_emit(ptr @.str2728) br label %ifend2 ifend2: %t37 = load ptr, ptr %t23 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str1053) + call void @fn_emit(ptr @.str2729) %t38 = load ptr, ptr %t0 %t39 = getelementptr inbounds %Cmp_Node, ptr %t38, i32 0, i32 5 %t40 = load ptr, ptr %t39 @@ -19280,33 +28891,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_str_concat(ptr @.str1054, ptr %t45) - %t47 = call ptr @fn_str_concat(ptr %t46, ptr @.str1055) + %t46 = call ptr @fn_str_concat(ptr @.str2730, ptr %t45) + %t47 = call ptr @fn_str_concat(ptr %t46, ptr @.str2731) %t48 = call ptr @fn_emit_bind(ptr %t47) store ptr %t48, ptr %t49 %t50 = load ptr, ptr %t49 - %t51 = call ptr @fn_str_concat(ptr @.str1056, ptr %t50) - %t52 = call ptr @fn_str_concat(ptr %t51, ptr @.str1057) + %t51 = call ptr @fn_str_concat(ptr @.str2732, ptr %t50) + %t52 = call ptr @fn_str_concat(ptr %t51, ptr @.str2733) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - call void @fn_emit(ptr @.str1058) + call void @fn_emit(ptr @.str2734) %t55 = load ptr, ptr %t54 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str1059) + call void @fn_emit(ptr @.str2735) %t56 = load ptr, ptr %t2 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1060) - call void @fn_emit(ptr @.str1061) + call void @fn_emit(ptr @.str2736) + call void @fn_emit(ptr @.str2737) %t57 = load ptr, ptr %t25 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1062) + call void @fn_emit(ptr @.str2738) %t58 = load ptr, ptr %t25 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str1063) + call void @fn_emit(ptr @.str2739) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_str_concat(ptr @.str1064, ptr %t59) + %t60 = call ptr @fn_str_concat(ptr @.str2740, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) - %t62 = call ptr @fn_val(ptr %t61, ptr @.str1065) + %t62 = call ptr @fn_val(ptr %t61, ptr @.str2741) store ptr %t62, ptr %retval br label %ret ret: @@ -19320,46 +28931,46 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str1066) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str2742) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str1067, ptr %retval + store ptr @.str2743, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str1068) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str2744) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str1069, ptr %retval + store ptr @.str2745, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str1070) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str2746) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str1071, ptr %retval + store ptr @.str2747, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str1072) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str2748) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str1073, ptr %retval + store ptr @.str2749, ptr %retval br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str1074) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str2750) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: - store ptr @.str1075, ptr %retval + store ptr @.str2751, ptr %retval br label %ret ifend14: - store ptr @.str1076, ptr %retval + store ptr @.str2752, ptr %retval br label %ret ret: %t16 = load ptr, ptr %retval @@ -19377,14 +28988,14 @@ entry: %t5 = alloca i32 store ptr %arg_op, ptr %t0 %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str1077) + %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str2753) %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_str_eq(ptr %t10, ptr @.str1078) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str2754) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t5 @@ -19397,7 +29008,7 @@ scend1: br i1 %t15, label %scend3, label %sc2 sc2: %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str1079) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str2755) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t4 @@ -19410,7 +29021,7 @@ scend3: br i1 %t22, label %scend5, label %sc4 sc4: %t24 = load ptr, ptr %t0 - %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str1080) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str2756) %t26 = icmp ne i32 %t25, 0 %t27 = zext i1 %t26 to i32 store i32 %t27, ptr %t3 @@ -19423,7 +29034,7 @@ scend5: br i1 %t29, label %scend7, label %sc6 sc6: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str1081) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str2757) %t33 = icmp ne i32 %t32, 0 %t34 = zext i1 %t33 to i32 store i32 %t34, ptr %t2 @@ -19436,7 +29047,7 @@ scend7: br i1 %t36, label %scend9, label %sc8 sc8: %t38 = load ptr, ptr %t0 - %t39 = call i32 @fn_str_eq(ptr %t38, ptr @.str1082) + %t39 = call i32 @fn_str_eq(ptr %t38, ptr @.str2758) %t40 = icmp ne i32 %t39, 0 %t41 = zext i1 %t40 to i32 store i32 %t41, ptr %t1 @@ -19456,78 +29067,78 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str1083) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str2759) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str1084, ptr %retval + store ptr @.str2760, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str1085) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str2761) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str1086, ptr %retval + store ptr @.str2762, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str1087) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str2763) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str1088, ptr %retval + store ptr @.str2764, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str1089) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str2765) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str1090, ptr %retval + store ptr @.str2766, ptr %retval br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str1091) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str2767) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: - store ptr @.str1092, ptr %retval + store ptr @.str2768, ptr %retval br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str1093) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str2769) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: - store ptr @.str1094, ptr %retval + store ptr @.str2770, ptr %retval br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str1095) + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str2771) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: - store ptr @.str1096, ptr %retval + store ptr @.str2772, ptr %retval br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str1097) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str2773) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: - store ptr @.str1098, ptr %retval + store ptr @.str2774, ptr %retval br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str1099) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str2775) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: - store ptr @.str1100, ptr %retval + store ptr @.str2776, ptr %retval br label %ret ifend26: - store ptr @.str1101, ptr %retval + store ptr @.str2777, ptr %retval br label %ret ret: %t28 = load ptr, ptr %retval @@ -19542,7 +29153,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_str_eq(ptr %t3, ptr @.str1102) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2778) %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then0, label %ifend2 then0: @@ -19555,8 +29166,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_str_concat(ptr @.str1103, ptr %t11) - %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str1104) + %t12 = call ptr @fn_str_concat(ptr @.str2779, ptr %t11) + %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str2780) %t14 = call ptr @fn_emit_bind(ptr %t13) store ptr %t14, ptr %retval br label %ret @@ -19578,57 +29189,57 @@ entry: 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 @.str1105) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2781) %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 = call ptr @fn_str_concat(ptr @.str1106, ptr %t8) - %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str1107) + %t9 = call ptr @fn_str_concat(ptr @.str2782, ptr %t8) + %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str2783) %t11 = load ptr, ptr %t2 %t12 = getelementptr inbounds %Cmp_Val, ptr %t11, i32 0, i32 0 %t13 = load ptr, ptr %t12 %t14 = call ptr @fn_str_concat(ptr %t10, ptr %t13) - %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str1108) + %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str2784) %t16 = call ptr @fn_emit_bind(ptr %t15) - %t17 = call ptr @fn_val(ptr %t16, ptr @.str1109) + %t17 = call ptr @fn_val(ptr %t16, ptr @.str2785) 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 = call ptr @fn_str_concat(ptr @.str1110, ptr %t20) - %t22 = call ptr @fn_str_concat(ptr %t21, ptr @.str1111) + %t21 = call ptr @fn_str_concat(ptr @.str2786, ptr %t20) + %t22 = call ptr @fn_str_concat(ptr %t21, ptr @.str2787) %t23 = load ptr, ptr %t2 %t24 = getelementptr inbounds %Cmp_Val, ptr %t23, i32 0, i32 0 %t25 = load ptr, ptr %t24 %t26 = call ptr @fn_str_concat(ptr %t22, ptr %t25) - %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str1112) + %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str2788) %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 @.str1113) + %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str2789) %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 @.str1114, ptr %t33) - %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str1115) + %t34 = call ptr @fn_str_concat(ptr @.str2790, ptr %t33) + %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str2791) %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 @.str1116, ptr %t38) - %t40 = call ptr @fn_str_concat(ptr %t39, ptr @.str1117) + %t39 = call ptr @fn_str_concat(ptr @.str2792, ptr %t38) + %t40 = call ptr @fn_str_concat(ptr %t39, ptr @.str2793) %t41 = call ptr @fn_emit_bind(ptr %t40) - %t42 = call ptr @fn_val(ptr %t41, ptr @.str1118) + %t42 = call ptr @fn_val(ptr %t41, ptr @.str2794) store ptr %t42, ptr %retval br label %ret ifend5: %t43 = load ptr, ptr %t29 - %t44 = call ptr @fn_val(ptr %t43, ptr @.str1119) + %t44 = call ptr @fn_val(ptr %t43, ptr @.str2795) store ptr %t44, ptr %retval br label %ret ret: @@ -19672,7 +29283,7 @@ entry: %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_str_eq(ptr %t4, ptr @.str1120) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str2796) %t6 = icmp ne i32 %t5, 0 %t7 = zext i1 %t6 to i32 store i32 %t7, ptr %t1 @@ -19681,7 +29292,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_str_eq(ptr %t10, ptr @.str1121) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str2797) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t1 @@ -19710,7 +29321,7 @@ ifend4: %t30 = getelementptr inbounds %Cmp_Val, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 %t32 = call ptr @fn_llty(ptr %t31) - %t33 = call i32 @fn_str_eq(ptr %t32, ptr @.str1122) + %t33 = call i32 @fn_str_eq(ptr %t32, ptr @.str2798) %t34 = icmp ne i32 %t33, 0 %t35 = zext i1 %t34 to i32 store i32 %t35, ptr %t28 @@ -19720,7 +29331,7 @@ sc5: %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 @.str1123) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str2799) %t41 = icmp ne i32 %t40, 0 %t42 = zext i1 %t41 to i32 store i32 %t42, ptr %t28 @@ -19761,20 +29372,20 @@ 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 @.str1124) + %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str2800) %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 @.str1125, ptr %t73, ptr %t74) + %t75 = call ptr @fn_emit_str_op(ptr @.str2801, ptr %t73, ptr %t74) store ptr %t75, ptr %retval br label %ret 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 @.str1126) + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str2802) %t82 = icmp ne i32 %t81, 0 %t83 = zext i1 %t82 to i32 store i32 %t83, ptr %t77 @@ -19783,7 +29394,7 @@ 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 @.str1127) + %t87 = call i32 @fn_str_eq(ptr %t86, ptr @.str2803) %t88 = icmp ne i32 %t87, 0 %t89 = zext i1 %t88 to i32 store i32 %t89, ptr %t77 @@ -19821,7 +29432,7 @@ 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 @.str1128) + %t110 = call i32 @fn_str_eq(ptr %t109, ptr @.str2804) %t111 = icmp ne i32 %t110, 0 %t112 = zext i1 %t111 to i32 store i32 %t112, ptr %t106 @@ -19830,7 +29441,7 @@ 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 @.str1129) + %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str2805) %t117 = icmp ne i32 %t116, 0 %t118 = zext i1 %t117 to i32 store i32 %t118, ptr %t106 @@ -19853,7 +29464,7 @@ then24: %t131 = getelementptr inbounds %Cmp_Val, ptr %t130, i32 0, i32 0 %t132 = load ptr, ptr %t131 store ptr %t132, ptr %t133 - store ptr @.str1130, ptr %t134 + store ptr @.str2806, ptr %t134 %t135 = load i32, ptr %t120 %t136 = icmp ne i32 %t135, 0 br i1 %t136, label %then27, label %else28 @@ -19870,7 +29481,7 @@ else28: %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 @.str1131) + %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str2807) %t147 = icmp ne i32 %t146, 0 %t148 = zext i1 %t147 to i32 store i32 %t148, ptr %t141 @@ -19880,7 +29491,7 @@ sc30: %t150 = getelementptr inbounds %Cmp_Val, ptr %t149, i32 0, i32 1 %t151 = load ptr, ptr %t150 %t152 = call ptr @fn_llty(ptr %t151) - %t153 = call i32 @fn_str_eq(ptr %t152, ptr @.str1132) + %t153 = call i32 @fn_str_eq(ptr %t152, ptr @.str2808) %t154 = icmp ne i32 %t153, 0 %t155 = zext i1 %t154 to i32 store i32 %t155, ptr %t141 @@ -19890,7 +29501,7 @@ scend31: %t157 = icmp ne i32 %t156, 0 br i1 %t157, label %then32, label %ifend34 then32: - store ptr @.str1133, ptr %t134 + store ptr @.str2809, ptr %t134 br label %ifend34 ifend34: br label %ifend29 @@ -19899,23 +29510,23 @@ ifend29: %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 = call ptr @fn_str_concat(ptr @.str1134, ptr %t161) - %t163 = call ptr @fn_str_concat(ptr %t162, ptr @.str1135) + %t162 = call ptr @fn_str_concat(ptr @.str2810, ptr %t161) + %t163 = call ptr @fn_str_concat(ptr %t162, ptr @.str2811) %t164 = load ptr, ptr %t134 %t165 = call ptr @fn_str_concat(ptr %t163, ptr %t164) - %t166 = call ptr @fn_str_concat(ptr %t165, ptr @.str1136) + %t166 = call ptr @fn_str_concat(ptr %t165, ptr @.str2812) %t167 = load ptr, ptr %t129 %t168 = call ptr @fn_str_concat(ptr %t166, ptr %t167) - %t169 = call ptr @fn_str_concat(ptr %t168, ptr @.str1137) + %t169 = call ptr @fn_str_concat(ptr %t168, ptr @.str2813) %t170 = load ptr, ptr %t133 %t171 = call ptr @fn_str_concat(ptr %t169, 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 @.str1138, ptr %t174) - %t176 = call ptr @fn_str_concat(ptr %t175, ptr @.str1139) + %t175 = call ptr @fn_str_concat(ptr @.str2814, ptr %t174) + %t176 = call ptr @fn_str_concat(ptr %t175, ptr @.str2815) %t177 = call ptr @fn_emit_bind(ptr %t176) - %t178 = call ptr @fn_val(ptr %t177, ptr @.str1140) + %t178 = call ptr @fn_val(ptr %t177, ptr @.str2816) store ptr %t178, ptr %retval br label %ret ifend26: @@ -19932,74 +29543,74 @@ then35: %t187 = load ptr, ptr %t0 %t188 = getelementptr inbounds %Cmp_Node, ptr %t187, i32 0, i32 1 %t189 = load ptr, ptr %t188 - %t190 = call i32 @fn_str_eq(ptr %t189, ptr @.str1141) + %t190 = call i32 @fn_str_eq(ptr %t189, ptr @.str2817) %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 @.str1142, ptr %t192) - %t194 = call ptr @fn_str_concat(ptr %t193, ptr @.str1143) + %t193 = call ptr @fn_str_concat(ptr @.str2818, ptr %t192) + %t194 = call ptr @fn_str_concat(ptr %t193, ptr @.str2819) %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 @.str1144, ptr %t197) - %t199 = call ptr @fn_str_concat(ptr %t198, ptr @.str1145) + %t198 = call ptr @fn_str_concat(ptr @.str2820, ptr %t197) + %t199 = call ptr @fn_str_concat(ptr %t198, ptr @.str2821) %t200 = call ptr @fn_emit_bind(ptr %t199) store ptr %t200, ptr %t201 %t202 = load ptr, ptr %t196 - %t203 = call ptr @fn_str_concat(ptr @.str1146, ptr %t202) - %t204 = call ptr @fn_str_concat(ptr %t203, ptr @.str1147) + %t203 = call ptr @fn_str_concat(ptr @.str2822, ptr %t202) + %t204 = call ptr @fn_str_concat(ptr %t203, ptr @.str2823) %t205 = load ptr, ptr %t201 %t206 = call ptr @fn_str_concat(ptr %t204, 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 @.str1148, ptr %t209) - %t211 = call ptr @fn_str_concat(ptr %t210, ptr @.str1149) + %t210 = call ptr @fn_str_concat(ptr @.str2824, ptr %t209) + %t211 = call ptr @fn_str_concat(ptr %t210, ptr @.str2825) %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 @.str1150, ptr %t214) - %t216 = call ptr @fn_str_concat(ptr %t215, ptr @.str1151) + %t215 = call ptr @fn_str_concat(ptr @.str2826, ptr %t214) + %t216 = call ptr @fn_str_concat(ptr %t215, ptr @.str2827) %t217 = call ptr @fn_emit_bind(ptr %t216) - %t218 = call ptr @fn_val(ptr %t217, ptr @.str1152) + %t218 = call ptr @fn_val(ptr %t217, ptr @.str2828) 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 @.str1153) + %t222 = call i32 @fn_str_eq(ptr %t221, ptr @.str2829) %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 @.str1154, ptr %t224) - %t226 = call ptr @fn_str_concat(ptr %t225, ptr @.str1155) + %t225 = call ptr @fn_str_concat(ptr @.str2830, ptr %t224) + %t226 = call ptr @fn_str_concat(ptr %t225, ptr @.str2831) %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 @.str1156, ptr %t229) - %t231 = call ptr @fn_str_concat(ptr %t230, ptr @.str1157) + %t230 = call ptr @fn_str_concat(ptr @.str2832, ptr %t229) + %t231 = call ptr @fn_str_concat(ptr %t230, ptr @.str2833) %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 @.str1158, ptr %t234) - %t236 = call ptr @fn_str_concat(ptr %t235, ptr @.str1159) + %t235 = call ptr @fn_str_concat(ptr @.str2834, ptr %t234) + %t236 = call ptr @fn_str_concat(ptr %t235, ptr @.str2835) %t237 = call ptr @fn_emit_bind(ptr %t236) store ptr %t237, ptr %t238 %t239 = load ptr, ptr %t233 - %t240 = call ptr @fn_str_concat(ptr @.str1160, ptr %t239) - %t241 = call ptr @fn_str_concat(ptr %t240, ptr @.str1161) + %t240 = call ptr @fn_str_concat(ptr @.str2836, ptr %t239) + %t241 = call ptr @fn_str_concat(ptr %t240, ptr @.str2837) %t242 = load ptr, ptr %t238 %t243 = call ptr @fn_str_concat(ptr %t241, 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 @.str1162, ptr %t246) - %t248 = call ptr @fn_str_concat(ptr %t247, ptr @.str1163) + %t247 = call ptr @fn_str_concat(ptr @.str2838, ptr %t246) + %t248 = call ptr @fn_str_concat(ptr %t247, ptr @.str2839) %t249 = call ptr @fn_emit_bind(ptr %t248) - %t250 = call ptr @fn_val(ptr %t249, ptr @.str1164) + %t250 = call ptr @fn_val(ptr %t249, ptr @.str2840) store ptr %t250, ptr %retval br label %ret ifend43: @@ -20007,16 +29618,16 @@ ifend43: %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 = call ptr @fn_str_concat(ptr %t254, ptr @.str1165) + %t255 = call ptr @fn_str_concat(ptr %t254, ptr @.str2841) %t256 = load ptr, ptr %t183 %t257 = call ptr @fn_str_concat(ptr %t255, ptr %t256) - %t258 = call ptr @fn_str_concat(ptr %t257, ptr @.str1166) + %t258 = call ptr @fn_str_concat(ptr %t257, ptr @.str2842) %t259 = load ptr, ptr %t186 %t260 = call ptr @fn_str_concat(ptr %t258, 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 @.str1167) + %t264 = call ptr @fn_val(ptr %t263, ptr @.str2843) store ptr %t264, ptr %retval br label %ret ifend37: @@ -20024,12 +29635,12 @@ ifend37: %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 = call ptr @fn_str_concat(ptr %t268, ptr @.str1168) + %t269 = call ptr @fn_str_concat(ptr %t268, ptr @.str2844) %t270 = load ptr, ptr %t22 %t271 = getelementptr inbounds %Cmp_Val, ptr %t270, i32 0, i32 0 %t272 = load ptr, ptr %t271 %t273 = call ptr @fn_str_concat(ptr %t269, ptr %t272) - %t274 = call ptr @fn_str_concat(ptr %t273, ptr @.str1169) + %t274 = call ptr @fn_str_concat(ptr %t273, ptr @.str2845) %t275 = load ptr, ptr %t27 %t276 = getelementptr inbounds %Cmp_Val, ptr %t275, i32 0, i32 0 %t277 = load ptr, ptr %t276 @@ -20037,7 +29648,7 @@ ifend37: %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 @.str1170) + %t282 = call ptr @fn_val(ptr %t281, ptr @.str2846) store ptr %t282, ptr %retval br label %ret ret: @@ -20144,7 +29755,7 @@ wbody4: %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then6, label %ifend8 then6: - call void @fn_perr(ptr @.str1171) + call void @fn_perr(ptr @.str2847) br label %ifend8 ifend8: %t30 = load i32, ptr %t7 @@ -20165,7 +29776,7 @@ wend5: %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then9, label %ifend11 then9: - call void @fn_perr(ptr @.str1172) + call void @fn_perr(ptr @.str2848) br label %ifend11 ifend11: %t43 = getelementptr %LSlice, ptr null, i32 1 @@ -20253,7 +29864,7 @@ then21: %t104 = load i32, ptr %t50 %t105 = getelementptr inbounds ptr, ptr %t103, i32 %t104 %t106 = load ptr, ptr %t105 - %t107 = call ptr @fn_str_concat(ptr @.str1173, ptr %t106) + %t107 = call ptr @fn_str_concat(ptr @.str2849, ptr %t106) call void @fn_perr(ptr %t107) br label %ifend23 ifend23: @@ -20405,763 +30016,791 @@ entry: %t0 = alloca ptr %t1 = alloca ptr %t2 = alloca ptr - %t3 = alloca ptr - %t10 = alloca ptr - %t751 = alloca ptr + %t91 = alloca ptr + %t98 = alloca ptr + %t1669 = alloca ptr store ptr %arg_ns, ptr %t0 store ptr %arg_meth, ptr %t1 store ptr %arg_e, ptr %t2 - store ptr null, ptr %t3 - %t4 = getelementptr %LSlice, ptr null, i32 1 - %t5 = ptrtoint ptr %t4 to i64 - %t6 = call ptr @malloc(i64 %t5) - %t7 = getelementptr inbounds %LSlice, ptr %t6, i32 0, i32 0 - store ptr null, ptr %t7 - %t8 = getelementptr inbounds %LSlice, ptr %t6, i32 0, i32 1 - store i32 0, ptr %t8 - %t9 = getelementptr inbounds %LSlice, ptr %t6, i32 0, i32 2 - store i32 0, ptr %t9 - store ptr %t6, ptr %t10 - %t11 = load ptr, ptr %t0 - %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str1174) - %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then0, label %ifend2 + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2850) + %t5 = icmp ne i32 %t4, 0 + br i1 %t5, label %then0, label %ifend2 then0: - %t14 = load ptr, ptr %t1 - %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str1175) - %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %then3, label %ifend5 + %t6 = load ptr, ptr %t1 + %t7 = call i32 @fn_is_math_ns(ptr %t6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then3, label %ifend5 then3: - store ptr @.str1176, ptr %t3 - %t17 = load ptr, ptr %t10 - %t18 = getelementptr inbounds %LSlice, ptr %t17, i32 0, i32 1 - %t19 = getelementptr inbounds %LSlice, ptr %t17, i32 0, i32 2 - %t20 = getelementptr inbounds %LSlice, ptr %t17, i32 0, i32 0 - %t21 = load i32, ptr %t18 - %t22 = load i32, ptr %t19 - %t23 = icmp sge i32 %t21, %t22 - br i1 %t23, label %grow6, label %put7 -grow6: - %t24 = mul i32 %t22, 2 - %t25 = icmp eq i32 %t22, 0 - %t26 = select i1 %t25, i32 8, i32 %t24 - %t27 = getelementptr ptr, ptr null, i32 1 - %t28 = ptrtoint ptr %t27 to i64 - %t29 = zext i32 %t26 to i64 - %t30 = mul i64 %t29, %t28 - %t31 = load ptr, ptr %t20 - %t32 = call ptr @realloc(ptr %t31, i64 %t30) - store ptr %t32, ptr %t20 - store i32 %t26, ptr %t19 - br label %put7 -put7: - %t33 = load ptr, ptr %t20 - %t34 = getelementptr inbounds ptr, ptr %t33, i32 %t21 - store ptr @.str1177, ptr %t34 - %t35 = add i32 %t21, 1 - store i32 %t35, ptr %t18 - br label %ifend5 + %t9 = load ptr, ptr %t1 + %t10 = load ptr, ptr %t2 + %t11 = call ptr @fn_emit_math_ns(ptr %t9, ptr %t10) + store ptr %t11, ptr %retval + br label %ret ifend5: - %t36 = load ptr, ptr %t1 - %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str1178) + %t12 = load ptr, ptr %t1 + %t13 = call ptr @fn_str_concat(ptr @.str2851, ptr %t12) + call void @fn_perr(ptr %t13) + br label %ifend2 +ifend2: + %t14 = load ptr, ptr %t0 + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str2852) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %then6, label %ifend8 +then6: + %t17 = load ptr, ptr %t1 + %t18 = call i32 @fn_is_text_ns(ptr %t17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then9, label %ifend11 +then9: + %t20 = load ptr, ptr %t1 + %t21 = load ptr, ptr %t2 + %t22 = call ptr @fn_emit_text_ns(ptr %t20, ptr %t21) + store ptr %t22, ptr %retval + br label %ret +ifend11: + %t23 = load ptr, ptr %t1 + %t24 = call ptr @fn_str_concat(ptr @.str2853, ptr %t23) + call void @fn_perr(ptr %t24) + br label %ifend8 +ifend8: + %t25 = load ptr, ptr %t0 + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str2854) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then12, label %ifend14 +then12: + %t28 = load ptr, ptr %t1 + %t29 = call i32 @fn_is_list_ns(ptr %t28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then15, label %ifend17 +then15: + %t31 = load ptr, ptr %t1 + %t32 = load ptr, ptr %t2 + %t33 = call ptr @fn_emit_list_ns(ptr %t31, ptr %t32) + store ptr %t33, ptr %retval + br label %ret +ifend17: + %t34 = load ptr, ptr %t1 + %t35 = call ptr @fn_str_concat(ptr @.str2855, ptr %t34) + call void @fn_perr(ptr %t35) + br label %ifend14 +ifend14: + %t36 = load ptr, ptr %t0 + %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str2856) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then8, label %ifend10 -then8: - store ptr @.str1179, ptr %t3 - %t39 = load ptr, ptr %t10 - %t40 = getelementptr inbounds %LSlice, ptr %t39, i32 0, i32 1 - %t41 = getelementptr inbounds %LSlice, ptr %t39, i32 0, i32 2 - %t42 = getelementptr inbounds %LSlice, ptr %t39, i32 0, i32 0 - %t43 = load i32, ptr %t40 - %t44 = load i32, ptr %t41 - %t45 = icmp sge i32 %t43, %t44 - br i1 %t45, label %grow11, label %put12 -grow11: - %t46 = mul i32 %t44, 2 - %t47 = icmp eq i32 %t44, 0 - %t48 = select i1 %t47, i32 8, i32 %t46 - %t49 = getelementptr ptr, ptr null, i32 1 - %t50 = ptrtoint ptr %t49 to i64 - %t51 = zext i32 %t48 to i64 - %t52 = mul i64 %t51, %t50 - %t53 = load ptr, ptr %t42 - %t54 = call ptr @realloc(ptr %t53, i64 %t52) - store ptr %t54, ptr %t42 - store i32 %t48, ptr %t41 - br label %put12 -put12: - %t55 = load ptr, ptr %t42 - %t56 = getelementptr inbounds ptr, ptr %t55, i32 %t43 - store ptr @.str1180, ptr %t56 - %t57 = add i32 %t43, 1 - store i32 %t57, ptr %t40 - %t58 = load ptr, ptr %t10 - %t59 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 1 - %t60 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 2 - %t61 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 0 - %t62 = load i32, ptr %t59 - %t63 = load i32, ptr %t60 - %t64 = icmp sge i32 %t62, %t63 - br i1 %t64, label %grow13, label %put14 -grow13: - %t65 = mul i32 %t63, 2 - %t66 = icmp eq i32 %t63, 0 - %t67 = select i1 %t66, i32 8, i32 %t65 - %t68 = getelementptr ptr, ptr null, i32 1 - %t69 = ptrtoint ptr %t68 to i64 - %t70 = zext i32 %t67 to i64 - %t71 = mul i64 %t70, %t69 - %t72 = load ptr, ptr %t61 - %t73 = call ptr @realloc(ptr %t72, i64 %t71) - store ptr %t73, ptr %t61 - store i32 %t67, ptr %t60 - br label %put14 -put14: - %t74 = load ptr, ptr %t61 - %t75 = getelementptr inbounds ptr, ptr %t74, i32 %t62 - store ptr @.str1181, ptr %t75 - %t76 = add i32 %t62, 1 - store i32 %t76, ptr %t59 - %t77 = load ptr, ptr %t10 - %t78 = getelementptr inbounds %LSlice, ptr %t77, i32 0, i32 1 - %t79 = getelementptr inbounds %LSlice, ptr %t77, i32 0, i32 2 - %t80 = getelementptr inbounds %LSlice, ptr %t77, i32 0, i32 0 - %t81 = load i32, ptr %t78 - %t82 = load i32, ptr %t79 - %t83 = icmp sge i32 %t81, %t82 - br i1 %t83, label %grow15, label %put16 -grow15: - %t84 = mul i32 %t82, 2 - %t85 = icmp eq i32 %t82, 0 - %t86 = select i1 %t85, i32 8, i32 %t84 - %t87 = getelementptr ptr, ptr null, i32 1 - %t88 = ptrtoint ptr %t87 to i64 - %t89 = zext i32 %t86 to i64 - %t90 = mul i64 %t89, %t88 - %t91 = load ptr, ptr %t80 - %t92 = call ptr @realloc(ptr %t91, i64 %t90) - store ptr %t92, ptr %t80 - store i32 %t86, ptr %t79 - br label %put16 -put16: - %t93 = load ptr, ptr %t80 - %t94 = getelementptr inbounds ptr, ptr %t93, i32 %t81 - store ptr @.str1182, ptr %t94 - %t95 = add i32 %t81, 1 - store i32 %t95, ptr %t78 - %t96 = load ptr, ptr %t10 - %t97 = getelementptr inbounds %LSlice, ptr %t96, i32 0, i32 1 - %t98 = getelementptr inbounds %LSlice, ptr %t96, i32 0, i32 2 - %t99 = getelementptr inbounds %LSlice, ptr %t96, i32 0, i32 0 - %t100 = load i32, ptr %t97 - %t101 = load i32, ptr %t98 - %t102 = icmp sge i32 %t100, %t101 - br i1 %t102, label %grow17, label %put18 -grow17: - %t103 = mul i32 %t101, 2 - %t104 = icmp eq i32 %t101, 0 - %t105 = select i1 %t104, i32 8, i32 %t103 - %t106 = getelementptr ptr, ptr null, i32 1 - %t107 = ptrtoint ptr %t106 to i64 - %t108 = zext i32 %t105 to i64 - %t109 = mul i64 %t108, %t107 - %t110 = load ptr, ptr %t99 - %t111 = call ptr @realloc(ptr %t110, i64 %t109) - store ptr %t111, ptr %t99 - store i32 %t105, ptr %t98 - br label %put18 -put18: - %t112 = load ptr, ptr %t99 - %t113 = getelementptr inbounds ptr, ptr %t112, i32 %t100 - store ptr @.str1183, ptr %t113 - %t114 = add i32 %t100, 1 - store i32 %t114, ptr %t97 - %t115 = load ptr, ptr %t10 - %t116 = getelementptr inbounds %LSlice, ptr %t115, i32 0, i32 1 - %t117 = getelementptr inbounds %LSlice, ptr %t115, i32 0, i32 2 - %t118 = getelementptr inbounds %LSlice, ptr %t115, i32 0, i32 0 - %t119 = load i32, ptr %t116 - %t120 = load i32, ptr %t117 - %t121 = icmp sge i32 %t119, %t120 - br i1 %t121, label %grow19, label %put20 -grow19: - %t122 = mul i32 %t120, 2 - %t123 = icmp eq i32 %t120, 0 - %t124 = select i1 %t123, i32 8, i32 %t122 - %t125 = getelementptr ptr, ptr null, i32 1 - %t126 = ptrtoint ptr %t125 to i64 - %t127 = zext i32 %t124 to i64 - %t128 = mul i64 %t127, %t126 - %t129 = load ptr, ptr %t118 - %t130 = call ptr @realloc(ptr %t129, i64 %t128) - store ptr %t130, ptr %t118 - store i32 %t124, ptr %t117 - br label %put20 -put20: - %t131 = load ptr, ptr %t118 - %t132 = getelementptr inbounds ptr, ptr %t131, i32 %t119 - store ptr @.str1184, ptr %t132 - %t133 = add i32 %t119, 1 - store i32 %t133, ptr %t116 - br label %ifend10 -ifend10: - %t134 = load ptr, ptr %t1 - %t135 = call i32 @fn_str_eq(ptr %t134, ptr @.str1185) - %t136 = icmp ne i32 %t135, 0 - br i1 %t136, label %then21, label %ifend23 + br i1 %t38, label %then18, label %ifend20 +then18: + %t39 = load ptr, ptr %t1 + %t40 = call i32 @fn_is_ease_ns(ptr %t39) + %t41 = icmp ne i32 %t40, 0 + br i1 %t41, label %then21, label %ifend23 then21: - store ptr @.str1186, ptr %t3 - %t137 = load ptr, ptr %t10 - %t138 = getelementptr inbounds %LSlice, ptr %t137, i32 0, i32 1 - %t139 = getelementptr inbounds %LSlice, ptr %t137, i32 0, i32 2 - %t140 = getelementptr inbounds %LSlice, ptr %t137, i32 0, i32 0 - %t141 = load i32, ptr %t138 - %t142 = load i32, ptr %t139 - %t143 = icmp sge i32 %t141, %t142 - br i1 %t143, label %grow24, label %put25 -grow24: - %t144 = mul i32 %t142, 2 - %t145 = icmp eq i32 %t142, 0 - %t146 = select i1 %t145, i32 8, i32 %t144 - %t147 = getelementptr ptr, ptr null, i32 1 - %t148 = ptrtoint ptr %t147 to i64 - %t149 = zext i32 %t146 to i64 - %t150 = mul i64 %t149, %t148 - %t151 = load ptr, ptr %t140 - %t152 = call ptr @realloc(ptr %t151, i64 %t150) - store ptr %t152, ptr %t140 - store i32 %t146, ptr %t139 - br label %put25 -put25: - %t153 = load ptr, ptr %t140 - %t154 = getelementptr inbounds ptr, ptr %t153, i32 %t141 - store ptr @.str1187, ptr %t154 - %t155 = add i32 %t141, 1 - store i32 %t155, ptr %t138 - %t156 = load ptr, ptr %t10 - %t157 = getelementptr inbounds %LSlice, ptr %t156, i32 0, i32 1 - %t158 = getelementptr inbounds %LSlice, ptr %t156, i32 0, i32 2 - %t159 = getelementptr inbounds %LSlice, ptr %t156, i32 0, i32 0 - %t160 = load i32, ptr %t157 - %t161 = load i32, ptr %t158 - %t162 = icmp sge i32 %t160, %t161 - br i1 %t162, label %grow26, label %put27 -grow26: - %t163 = mul i32 %t161, 2 - %t164 = icmp eq i32 %t161, 0 - %t165 = select i1 %t164, i32 8, i32 %t163 - %t166 = getelementptr ptr, ptr null, i32 1 - %t167 = ptrtoint ptr %t166 to i64 - %t168 = zext i32 %t165 to i64 - %t169 = mul i64 %t168, %t167 - %t170 = load ptr, ptr %t159 - %t171 = call ptr @realloc(ptr %t170, i64 %t169) - store ptr %t171, ptr %t159 - store i32 %t165, ptr %t158 - br label %put27 -put27: - %t172 = load ptr, ptr %t159 - %t173 = getelementptr inbounds ptr, ptr %t172, i32 %t160 - store ptr @.str1188, ptr %t173 - %t174 = add i32 %t160, 1 - store i32 %t174, ptr %t157 - %t175 = load ptr, ptr %t10 - %t176 = getelementptr inbounds %LSlice, ptr %t175, i32 0, i32 1 - %t177 = getelementptr inbounds %LSlice, ptr %t175, i32 0, i32 2 - %t178 = getelementptr inbounds %LSlice, ptr %t175, i32 0, i32 0 - %t179 = load i32, ptr %t176 - %t180 = load i32, ptr %t177 - %t181 = icmp sge i32 %t179, %t180 - br i1 %t181, label %grow28, label %put29 -grow28: - %t182 = mul i32 %t180, 2 - %t183 = icmp eq i32 %t180, 0 - %t184 = select i1 %t183, i32 8, i32 %t182 - %t185 = getelementptr ptr, ptr null, i32 1 - %t186 = ptrtoint ptr %t185 to i64 - %t187 = zext i32 %t184 to i64 - %t188 = mul i64 %t187, %t186 - %t189 = load ptr, ptr %t178 - %t190 = call ptr @realloc(ptr %t189, i64 %t188) - store ptr %t190, ptr %t178 - store i32 %t184, ptr %t177 - br label %put29 -put29: - %t191 = load ptr, ptr %t178 - %t192 = getelementptr inbounds ptr, ptr %t191, i32 %t179 - store ptr @.str1189, ptr %t192 - %t193 = add i32 %t179, 1 - store i32 %t193, ptr %t176 - %t194 = load ptr, ptr %t10 - %t195 = getelementptr inbounds %LSlice, ptr %t194, i32 0, i32 1 - %t196 = getelementptr inbounds %LSlice, ptr %t194, i32 0, i32 2 - %t197 = getelementptr inbounds %LSlice, ptr %t194, i32 0, i32 0 - %t198 = load i32, ptr %t195 - %t199 = load i32, ptr %t196 - %t200 = icmp sge i32 %t198, %t199 - br i1 %t200, label %grow30, label %put31 -grow30: - %t201 = mul i32 %t199, 2 - %t202 = icmp eq i32 %t199, 0 - %t203 = select i1 %t202, i32 8, i32 %t201 - %t204 = getelementptr ptr, ptr null, i32 1 - %t205 = ptrtoint ptr %t204 to i64 - %t206 = zext i32 %t203 to i64 - %t207 = mul i64 %t206, %t205 - %t208 = load ptr, ptr %t197 - %t209 = call ptr @realloc(ptr %t208, i64 %t207) - store ptr %t209, ptr %t197 - store i32 %t203, ptr %t196 - br label %put31 -put31: - %t210 = load ptr, ptr %t197 - %t211 = getelementptr inbounds ptr, ptr %t210, i32 %t198 - store ptr @.str1190, ptr %t211 - %t212 = add i32 %t198, 1 - store i32 %t212, ptr %t195 - %t213 = load ptr, ptr %t10 - %t214 = getelementptr inbounds %LSlice, ptr %t213, i32 0, i32 1 - %t215 = getelementptr inbounds %LSlice, ptr %t213, i32 0, i32 2 - %t216 = getelementptr inbounds %LSlice, ptr %t213, i32 0, i32 0 - %t217 = load i32, ptr %t214 - %t218 = load i32, ptr %t215 - %t219 = icmp sge i32 %t217, %t218 - br i1 %t219, label %grow32, label %put33 -grow32: - %t220 = mul i32 %t218, 2 - %t221 = icmp eq i32 %t218, 0 - %t222 = select i1 %t221, i32 8, i32 %t220 - %t223 = getelementptr ptr, ptr null, i32 1 - %t224 = ptrtoint ptr %t223 to i64 - %t225 = zext i32 %t222 to i64 - %t226 = mul i64 %t225, %t224 - %t227 = load ptr, ptr %t216 - %t228 = call ptr @realloc(ptr %t227, i64 %t226) - store ptr %t228, ptr %t216 - store i32 %t222, ptr %t215 - br label %put33 -put33: - %t229 = load ptr, ptr %t216 - %t230 = getelementptr inbounds ptr, ptr %t229, i32 %t217 - store ptr @.str1191, ptr %t230 - %t231 = add i32 %t217, 1 - store i32 %t231, ptr %t214 - br label %ifend23 + %t42 = load ptr, ptr %t1 + %t43 = load ptr, ptr %t2 + %t44 = call ptr @fn_emit_ease_ns(ptr %t42, ptr %t43) + store ptr %t44, ptr %retval + br label %ret ifend23: - %t232 = load ptr, ptr %t1 - %t233 = call i32 @fn_str_eq(ptr %t232, ptr @.str1192) - %t234 = icmp ne i32 %t233, 0 - br i1 %t234, label %then34, label %ifend36 -then34: - store ptr @.str1193, ptr %t3 - %t235 = load ptr, ptr %t10 - %t236 = getelementptr inbounds %LSlice, ptr %t235, i32 0, i32 1 - %t237 = getelementptr inbounds %LSlice, ptr %t235, i32 0, i32 2 - %t238 = getelementptr inbounds %LSlice, ptr %t235, i32 0, i32 0 - %t239 = load i32, ptr %t236 - %t240 = load i32, ptr %t237 - %t241 = icmp sge i32 %t239, %t240 - br i1 %t241, label %grow37, label %put38 -grow37: - %t242 = mul i32 %t240, 2 - %t243 = icmp eq i32 %t240, 0 - %t244 = select i1 %t243, i32 8, i32 %t242 - %t245 = getelementptr ptr, ptr null, i32 1 - %t246 = ptrtoint ptr %t245 to i64 - %t247 = zext i32 %t244 to i64 - %t248 = mul i64 %t247, %t246 - %t249 = load ptr, ptr %t238 - %t250 = call ptr @realloc(ptr %t249, i64 %t248) - store ptr %t250, ptr %t238 - store i32 %t244, ptr %t237 - br label %put38 -put38: - %t251 = load ptr, ptr %t238 - %t252 = getelementptr inbounds ptr, ptr %t251, i32 %t239 - store ptr @.str1194, ptr %t252 - %t253 = add i32 %t239, 1 - store i32 %t253, ptr %t236 - %t254 = load ptr, ptr %t10 - %t255 = getelementptr inbounds %LSlice, ptr %t254, i32 0, i32 1 - %t256 = getelementptr inbounds %LSlice, ptr %t254, i32 0, i32 2 - %t257 = getelementptr inbounds %LSlice, ptr %t254, i32 0, i32 0 - %t258 = load i32, ptr %t255 - %t259 = load i32, ptr %t256 - %t260 = icmp sge i32 %t258, %t259 - br i1 %t260, label %grow39, label %put40 -grow39: - %t261 = mul i32 %t259, 2 - %t262 = icmp eq i32 %t259, 0 - %t263 = select i1 %t262, i32 8, i32 %t261 - %t264 = getelementptr ptr, ptr null, i32 1 - %t265 = ptrtoint ptr %t264 to i64 - %t266 = zext i32 %t263 to i64 - %t267 = mul i64 %t266, %t265 - %t268 = load ptr, ptr %t257 - %t269 = call ptr @realloc(ptr %t268, i64 %t267) - store ptr %t269, ptr %t257 - store i32 %t263, ptr %t256 - br label %put40 -put40: - %t270 = load ptr, ptr %t257 - %t271 = getelementptr inbounds ptr, ptr %t270, i32 %t258 - store ptr @.str1195, ptr %t271 - %t272 = add i32 %t258, 1 - store i32 %t272, ptr %t255 - %t273 = load ptr, ptr %t10 - %t274 = getelementptr inbounds %LSlice, ptr %t273, i32 0, i32 1 - %t275 = getelementptr inbounds %LSlice, ptr %t273, i32 0, i32 2 - %t276 = getelementptr inbounds %LSlice, ptr %t273, i32 0, i32 0 - %t277 = load i32, ptr %t274 - %t278 = load i32, ptr %t275 - %t279 = icmp sge i32 %t277, %t278 - br i1 %t279, label %grow41, label %put42 -grow41: - %t280 = mul i32 %t278, 2 - %t281 = icmp eq i32 %t278, 0 - %t282 = select i1 %t281, i32 8, i32 %t280 - %t283 = getelementptr ptr, ptr null, i32 1 - %t284 = ptrtoint ptr %t283 to i64 - %t285 = zext i32 %t282 to i64 - %t286 = mul i64 %t285, %t284 - %t287 = load ptr, ptr %t276 - %t288 = call ptr @realloc(ptr %t287, i64 %t286) - store ptr %t288, ptr %t276 - store i32 %t282, ptr %t275 - br label %put42 -put42: - %t289 = load ptr, ptr %t276 - %t290 = getelementptr inbounds ptr, ptr %t289, i32 %t277 - store ptr @.str1196, ptr %t290 - %t291 = add i32 %t277, 1 - store i32 %t291, ptr %t274 - br label %ifend36 -ifend36: - %t292 = load ptr, ptr %t1 - %t293 = call i32 @fn_str_eq(ptr %t292, ptr @.str1197) - %t294 = icmp ne i32 %t293, 0 - br i1 %t294, label %then43, label %ifend45 -then43: - store ptr @.str1198, ptr %t3 - %t295 = load ptr, ptr %t10 - %t296 = getelementptr inbounds %LSlice, ptr %t295, i32 0, i32 1 - %t297 = getelementptr inbounds %LSlice, ptr %t295, i32 0, i32 2 - %t298 = getelementptr inbounds %LSlice, ptr %t295, i32 0, i32 0 - %t299 = load i32, ptr %t296 - %t300 = load i32, ptr %t297 - %t301 = icmp sge i32 %t299, %t300 - br i1 %t301, label %grow46, label %put47 -grow46: - %t302 = mul i32 %t300, 2 - %t303 = icmp eq i32 %t300, 0 - %t304 = select i1 %t303, i32 8, i32 %t302 - %t305 = getelementptr ptr, ptr null, i32 1 - %t306 = ptrtoint ptr %t305 to i64 - %t307 = zext i32 %t304 to i64 - %t308 = mul i64 %t307, %t306 - %t309 = load ptr, ptr %t298 - %t310 = call ptr @realloc(ptr %t309, i64 %t308) - store ptr %t310, ptr %t298 - store i32 %t304, ptr %t297 - br label %put47 -put47: - %t311 = load ptr, ptr %t298 - %t312 = getelementptr inbounds ptr, ptr %t311, i32 %t299 - store ptr @.str1199, ptr %t312 - %t313 = add i32 %t299, 1 - store i32 %t313, ptr %t296 - %t314 = load ptr, ptr %t10 - %t315 = getelementptr inbounds %LSlice, ptr %t314, i32 0, i32 1 - %t316 = getelementptr inbounds %LSlice, ptr %t314, i32 0, i32 2 - %t317 = getelementptr inbounds %LSlice, ptr %t314, i32 0, i32 0 - %t318 = load i32, ptr %t315 - %t319 = load i32, ptr %t316 - %t320 = icmp sge i32 %t318, %t319 - br i1 %t320, label %grow48, label %put49 -grow48: - %t321 = mul i32 %t319, 2 - %t322 = icmp eq i32 %t319, 0 - %t323 = select i1 %t322, i32 8, i32 %t321 - %t324 = getelementptr ptr, ptr null, i32 1 - %t325 = ptrtoint ptr %t324 to i64 - %t326 = zext i32 %t323 to i64 - %t327 = mul i64 %t326, %t325 - %t328 = load ptr, ptr %t317 - %t329 = call ptr @realloc(ptr %t328, i64 %t327) - store ptr %t329, ptr %t317 - store i32 %t323, ptr %t316 - br label %put49 -put49: - %t330 = load ptr, ptr %t317 - %t331 = getelementptr inbounds ptr, ptr %t330, i32 %t318 - store ptr @.str1200, ptr %t331 - %t332 = add i32 %t318, 1 - store i32 %t332, ptr %t315 - %t333 = load ptr, ptr %t10 - %t334 = getelementptr inbounds %LSlice, ptr %t333, i32 0, i32 1 - %t335 = getelementptr inbounds %LSlice, ptr %t333, i32 0, i32 2 - %t336 = getelementptr inbounds %LSlice, ptr %t333, i32 0, i32 0 - %t337 = load i32, ptr %t334 - %t338 = load i32, ptr %t335 - %t339 = icmp sge i32 %t337, %t338 - br i1 %t339, label %grow50, label %put51 -grow50: - %t340 = mul i32 %t338, 2 - %t341 = icmp eq i32 %t338, 0 - %t342 = select i1 %t341, i32 8, i32 %t340 - %t343 = getelementptr ptr, ptr null, i32 1 - %t344 = ptrtoint ptr %t343 to i64 - %t345 = zext i32 %t342 to i64 - %t346 = mul i64 %t345, %t344 - %t347 = load ptr, ptr %t336 - %t348 = call ptr @realloc(ptr %t347, i64 %t346) - store ptr %t348, ptr %t336 - store i32 %t342, ptr %t335 - br label %put51 -put51: - %t349 = load ptr, ptr %t336 - %t350 = getelementptr inbounds ptr, ptr %t349, i32 %t337 - store ptr @.str1201, ptr %t350 - %t351 = add i32 %t337, 1 - store i32 %t351, ptr %t334 - %t352 = load ptr, ptr %t10 - %t353 = getelementptr inbounds %LSlice, ptr %t352, i32 0, i32 1 - %t354 = getelementptr inbounds %LSlice, ptr %t352, i32 0, i32 2 - %t355 = getelementptr inbounds %LSlice, ptr %t352, i32 0, i32 0 - %t356 = load i32, ptr %t353 - %t357 = load i32, ptr %t354 - %t358 = icmp sge i32 %t356, %t357 - br i1 %t358, label %grow52, label %put53 -grow52: - %t359 = mul i32 %t357, 2 - %t360 = icmp eq i32 %t357, 0 - %t361 = select i1 %t360, i32 8, i32 %t359 - %t362 = getelementptr ptr, ptr null, i32 1 - %t363 = ptrtoint ptr %t362 to i64 - %t364 = zext i32 %t361 to i64 - %t365 = mul i64 %t364, %t363 - %t366 = load ptr, ptr %t355 - %t367 = call ptr @realloc(ptr %t366, i64 %t365) - store ptr %t367, ptr %t355 - store i32 %t361, ptr %t354 - br label %put53 -put53: - %t368 = load ptr, ptr %t355 - %t369 = getelementptr inbounds ptr, ptr %t368, i32 %t356 - store ptr @.str1202, ptr %t369 - %t370 = add i32 %t356, 1 - store i32 %t370, ptr %t353 - %t371 = load ptr, ptr %t10 - %t372 = getelementptr inbounds %LSlice, ptr %t371, i32 0, i32 1 - %t373 = getelementptr inbounds %LSlice, ptr %t371, i32 0, i32 2 - %t374 = getelementptr inbounds %LSlice, ptr %t371, i32 0, i32 0 - %t375 = load i32, ptr %t372 - %t376 = load i32, ptr %t373 - %t377 = icmp sge i32 %t375, %t376 - br i1 %t377, label %grow54, label %put55 + %t45 = load ptr, ptr %t1 + %t46 = call ptr @fn_str_concat(ptr @.str2857, ptr %t45) + call void @fn_perr(ptr %t46) + br label %ifend20 +ifend20: + %t47 = load ptr, ptr %t0 + %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str2858) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %then24, label %ifend26 +then24: + %t50 = load ptr, ptr %t1 + %t51 = call i32 @fn_is_collide_ns(ptr %t50) + %t52 = icmp ne i32 %t51, 0 + br i1 %t52, label %then27, label %ifend29 +then27: + %t53 = load ptr, ptr %t1 + %t54 = load ptr, ptr %t2 + %t55 = call ptr @fn_emit_collide_ns(ptr %t53, ptr %t54) + store ptr %t55, ptr %retval + br label %ret +ifend29: + %t56 = load ptr, ptr %t1 + %t57 = call ptr @fn_str_concat(ptr @.str2859, ptr %t56) + call void @fn_perr(ptr %t57) + br label %ifend26 +ifend26: + %t58 = load ptr, ptr %t0 + %t59 = call i32 @fn_str_eq(ptr %t58, ptr @.str2860) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then30, label %ifend32 +then30: + %t61 = load ptr, ptr %t1 + %t62 = call i32 @fn_is_mem_ns(ptr %t61) + %t63 = icmp ne i32 %t62, 0 + br i1 %t63, label %then33, label %ifend35 +then33: + %t64 = load ptr, ptr %t1 + %t65 = load ptr, ptr %t2 + %t66 = call ptr @fn_emit_mem_ns(ptr %t64, ptr %t65) + store ptr %t66, ptr %retval + br label %ret +ifend35: + %t67 = load ptr, ptr %t1 + %t68 = call ptr @fn_str_concat(ptr @.str2861, ptr %t67) + call void @fn_perr(ptr %t68) + br label %ifend32 +ifend32: + %t69 = load ptr, ptr %t0 + %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str2862) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then36, label %ifend38 +then36: + %t72 = load ptr, ptr %t1 + %t73 = call i32 @fn_is_colorfn_ns(ptr %t72) + %t74 = icmp ne i32 %t73, 0 + br i1 %t74, label %then39, label %ifend41 +then39: + %t75 = load ptr, ptr %t1 + %t76 = load ptr, ptr %t2 + %t77 = call ptr @fn_emit_colorfn_ns(ptr %t75, ptr %t76) + store ptr %t77, ptr %retval + br label %ret +ifend41: + %t78 = load ptr, ptr %t1 + %t79 = call ptr @fn_str_concat(ptr @.str2863, ptr %t78) + call void @fn_perr(ptr %t79) + br label %ifend38 +ifend38: + %t80 = load ptr, ptr %t0 + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str2864) + %t82 = icmp ne i32 %t81, 0 + br i1 %t82, label %then42, label %ifend44 +then42: + %t83 = load ptr, ptr %t1 + %t84 = call i32 @fn_is_time_ns(ptr %t83) + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %then45, label %ifend47 +then45: + %t86 = load ptr, ptr %t1 + %t87 = load ptr, ptr %t2 + %t88 = call ptr @fn_emit_time_ns(ptr %t86, ptr %t87) + store ptr %t88, ptr %retval + br label %ret +ifend47: + %t89 = load ptr, ptr %t1 + %t90 = call ptr @fn_str_concat(ptr @.str2865, ptr %t89) + call void @fn_perr(ptr %t90) + br label %ifend44 +ifend44: + store ptr null, ptr %t91 + %t92 = getelementptr %LSlice, ptr null, i32 1 + %t93 = ptrtoint ptr %t92 to i64 + %t94 = call ptr @malloc(i64 %t93) + %t95 = getelementptr inbounds %LSlice, ptr %t94, i32 0, i32 0 + store ptr null, ptr %t95 + %t96 = getelementptr inbounds %LSlice, ptr %t94, i32 0, i32 1 + store i32 0, ptr %t96 + %t97 = getelementptr inbounds %LSlice, ptr %t94, i32 0, i32 2 + store i32 0, ptr %t97 + store ptr %t94, ptr %t98 + %t99 = load ptr, ptr %t0 + %t100 = call i32 @fn_str_eq(ptr %t99, ptr @.str2866) + %t101 = icmp ne i32 %t100, 0 + br i1 %t101, label %then48, label %ifend50 +then48: + %t102 = load ptr, ptr %t1 + %t103 = call i32 @fn_str_eq(ptr %t102, ptr @.str2867) + %t104 = icmp ne i32 %t103, 0 + br i1 %t104, label %then51, label %ifend53 +then51: + store ptr @.str2868, ptr %t91 + %t105 = load ptr, ptr %t98 + %t106 = getelementptr inbounds %LSlice, ptr %t105, i32 0, i32 1 + %t107 = getelementptr inbounds %LSlice, ptr %t105, i32 0, i32 2 + %t108 = getelementptr inbounds %LSlice, ptr %t105, i32 0, i32 0 + %t109 = load i32, ptr %t106 + %t110 = load i32, ptr %t107 + %t111 = icmp sge i32 %t109, %t110 + br i1 %t111, label %grow54, label %put55 grow54: - %t378 = mul i32 %t376, 2 - %t379 = icmp eq i32 %t376, 0 - %t380 = select i1 %t379, i32 8, i32 %t378 - %t381 = getelementptr ptr, ptr null, i32 1 - %t382 = ptrtoint ptr %t381 to i64 - %t383 = zext i32 %t380 to i64 - %t384 = mul i64 %t383, %t382 - %t385 = load ptr, ptr %t374 - %t386 = call ptr @realloc(ptr %t385, i64 %t384) - store ptr %t386, ptr %t374 - store i32 %t380, ptr %t373 + %t112 = mul i32 %t110, 2 + %t113 = icmp eq i32 %t110, 0 + %t114 = select i1 %t113, i32 8, i32 %t112 + %t115 = getelementptr ptr, ptr null, i32 1 + %t116 = ptrtoint ptr %t115 to i64 + %t117 = zext i32 %t114 to i64 + %t118 = mul i64 %t117, %t116 + %t119 = load ptr, ptr %t108 + %t120 = call ptr @realloc(ptr %t119, i64 %t118) + store ptr %t120, ptr %t108 + store i32 %t114, ptr %t107 br label %put55 put55: - %t387 = load ptr, ptr %t374 - %t388 = getelementptr inbounds ptr, ptr %t387, i32 %t375 - store ptr @.str1203, ptr %t388 - %t389 = add i32 %t375, 1 - store i32 %t389, ptr %t372 - br label %ifend45 -ifend45: - %t390 = load ptr, ptr %t1 - %t391 = call i32 @fn_str_eq(ptr %t390, ptr @.str1204) - %t392 = icmp ne i32 %t391, 0 - br i1 %t392, label %then56, label %ifend58 + %t121 = load ptr, ptr %t108 + %t122 = getelementptr inbounds ptr, ptr %t121, i32 %t109 + store ptr @.str2869, ptr %t122 + %t123 = add i32 %t109, 1 + store i32 %t123, ptr %t106 + br label %ifend53 +ifend53: + %t124 = load ptr, ptr %t1 + %t125 = call i32 @fn_str_eq(ptr %t124, ptr @.str2870) + %t126 = icmp ne i32 %t125, 0 + br i1 %t126, label %then56, label %ifend58 then56: - store ptr @.str1205, ptr %t3 - %t393 = load ptr, ptr %t10 - %t394 = getelementptr inbounds %LSlice, ptr %t393, i32 0, i32 1 - %t395 = getelementptr inbounds %LSlice, ptr %t393, i32 0, i32 2 - %t396 = getelementptr inbounds %LSlice, ptr %t393, i32 0, i32 0 - %t397 = load i32, ptr %t394 - %t398 = load i32, ptr %t395 - %t399 = icmp sge i32 %t397, %t398 - br i1 %t399, label %grow59, label %put60 + store ptr @.str2871, ptr %t91 + %t127 = load ptr, ptr %t98 + %t128 = getelementptr inbounds %LSlice, ptr %t127, i32 0, i32 1 + %t129 = getelementptr inbounds %LSlice, ptr %t127, i32 0, i32 2 + %t130 = getelementptr inbounds %LSlice, ptr %t127, i32 0, i32 0 + %t131 = load i32, ptr %t128 + %t132 = load i32, ptr %t129 + %t133 = icmp sge i32 %t131, %t132 + br i1 %t133, label %grow59, label %put60 grow59: - %t400 = mul i32 %t398, 2 - %t401 = icmp eq i32 %t398, 0 - %t402 = select i1 %t401, i32 8, i32 %t400 - %t403 = getelementptr ptr, ptr null, i32 1 - %t404 = ptrtoint ptr %t403 to i64 - %t405 = zext i32 %t402 to i64 - %t406 = mul i64 %t405, %t404 - %t407 = load ptr, ptr %t396 - %t408 = call ptr @realloc(ptr %t407, i64 %t406) - store ptr %t408, ptr %t396 - store i32 %t402, ptr %t395 + %t134 = mul i32 %t132, 2 + %t135 = icmp eq i32 %t132, 0 + %t136 = select i1 %t135, i32 8, i32 %t134 + %t137 = getelementptr ptr, ptr null, i32 1 + %t138 = ptrtoint ptr %t137 to i64 + %t139 = zext i32 %t136 to i64 + %t140 = mul i64 %t139, %t138 + %t141 = load ptr, ptr %t130 + %t142 = call ptr @realloc(ptr %t141, i64 %t140) + store ptr %t142, ptr %t130 + store i32 %t136, ptr %t129 br label %put60 put60: - %t409 = load ptr, ptr %t396 - %t410 = getelementptr inbounds ptr, ptr %t409, i32 %t397 - store ptr @.str1206, ptr %t410 - %t411 = add i32 %t397, 1 - store i32 %t411, ptr %t394 - %t412 = load ptr, ptr %t10 - %t413 = getelementptr inbounds %LSlice, ptr %t412, i32 0, i32 1 - %t414 = getelementptr inbounds %LSlice, ptr %t412, i32 0, i32 2 - %t415 = getelementptr inbounds %LSlice, ptr %t412, i32 0, i32 0 - %t416 = load i32, ptr %t413 - %t417 = load i32, ptr %t414 - %t418 = icmp sge i32 %t416, %t417 - br i1 %t418, label %grow61, label %put62 + %t143 = load ptr, ptr %t130 + %t144 = getelementptr inbounds ptr, ptr %t143, i32 %t131 + store ptr @.str2872, ptr %t144 + %t145 = add i32 %t131, 1 + store i32 %t145, ptr %t128 + %t146 = load ptr, ptr %t98 + %t147 = getelementptr inbounds %LSlice, ptr %t146, i32 0, i32 1 + %t148 = getelementptr inbounds %LSlice, ptr %t146, i32 0, i32 2 + %t149 = getelementptr inbounds %LSlice, ptr %t146, i32 0, i32 0 + %t150 = load i32, ptr %t147 + %t151 = load i32, ptr %t148 + %t152 = icmp sge i32 %t150, %t151 + br i1 %t152, label %grow61, label %put62 grow61: - %t419 = mul i32 %t417, 2 - %t420 = icmp eq i32 %t417, 0 - %t421 = select i1 %t420, i32 8, i32 %t419 - %t422 = getelementptr ptr, ptr null, i32 1 - %t423 = ptrtoint ptr %t422 to i64 - %t424 = zext i32 %t421 to i64 - %t425 = mul i64 %t424, %t423 - %t426 = load ptr, ptr %t415 - %t427 = call ptr @realloc(ptr %t426, i64 %t425) - store ptr %t427, ptr %t415 - store i32 %t421, ptr %t414 + %t153 = mul i32 %t151, 2 + %t154 = icmp eq i32 %t151, 0 + %t155 = select i1 %t154, i32 8, i32 %t153 + %t156 = getelementptr ptr, ptr null, i32 1 + %t157 = ptrtoint ptr %t156 to i64 + %t158 = zext i32 %t155 to i64 + %t159 = mul i64 %t158, %t157 + %t160 = load ptr, ptr %t149 + %t161 = call ptr @realloc(ptr %t160, i64 %t159) + store ptr %t161, ptr %t149 + store i32 %t155, ptr %t148 br label %put62 put62: - %t428 = load ptr, ptr %t415 - %t429 = getelementptr inbounds ptr, ptr %t428, i32 %t416 - store ptr @.str1207, ptr %t429 - %t430 = add i32 %t416, 1 - store i32 %t430, ptr %t413 - %t431 = load ptr, ptr %t10 - %t432 = getelementptr inbounds %LSlice, ptr %t431, i32 0, i32 1 - %t433 = getelementptr inbounds %LSlice, ptr %t431, i32 0, i32 2 - %t434 = getelementptr inbounds %LSlice, ptr %t431, i32 0, i32 0 - %t435 = load i32, ptr %t432 - %t436 = load i32, ptr %t433 - %t437 = icmp sge i32 %t435, %t436 - br i1 %t437, label %grow63, label %put64 + %t162 = load ptr, ptr %t149 + %t163 = getelementptr inbounds ptr, ptr %t162, i32 %t150 + store ptr @.str2873, ptr %t163 + %t164 = add i32 %t150, 1 + store i32 %t164, ptr %t147 + %t165 = load ptr, ptr %t98 + %t166 = getelementptr inbounds %LSlice, ptr %t165, i32 0, i32 1 + %t167 = getelementptr inbounds %LSlice, ptr %t165, i32 0, i32 2 + %t168 = getelementptr inbounds %LSlice, ptr %t165, i32 0, i32 0 + %t169 = load i32, ptr %t166 + %t170 = load i32, ptr %t167 + %t171 = icmp sge i32 %t169, %t170 + br i1 %t171, label %grow63, label %put64 grow63: - %t438 = mul i32 %t436, 2 - %t439 = icmp eq i32 %t436, 0 - %t440 = select i1 %t439, i32 8, i32 %t438 - %t441 = getelementptr ptr, ptr null, i32 1 - %t442 = ptrtoint ptr %t441 to i64 - %t443 = zext i32 %t440 to i64 - %t444 = mul i64 %t443, %t442 - %t445 = load ptr, ptr %t434 - %t446 = call ptr @realloc(ptr %t445, i64 %t444) - store ptr %t446, ptr %t434 - store i32 %t440, ptr %t433 + %t172 = mul i32 %t170, 2 + %t173 = icmp eq i32 %t170, 0 + %t174 = select i1 %t173, i32 8, i32 %t172 + %t175 = getelementptr ptr, ptr null, i32 1 + %t176 = ptrtoint ptr %t175 to i64 + %t177 = zext i32 %t174 to i64 + %t178 = mul i64 %t177, %t176 + %t179 = load ptr, ptr %t168 + %t180 = call ptr @realloc(ptr %t179, i64 %t178) + store ptr %t180, ptr %t168 + store i32 %t174, ptr %t167 br label %put64 put64: - %t447 = load ptr, ptr %t434 - %t448 = getelementptr inbounds ptr, ptr %t447, i32 %t435 - store ptr @.str1208, ptr %t448 - %t449 = add i32 %t435, 1 - store i32 %t449, ptr %t432 - %t450 = load ptr, ptr %t10 - %t451 = getelementptr inbounds %LSlice, ptr %t450, i32 0, i32 1 - %t452 = getelementptr inbounds %LSlice, ptr %t450, i32 0, i32 2 - %t453 = getelementptr inbounds %LSlice, ptr %t450, i32 0, i32 0 - %t454 = load i32, ptr %t451 - %t455 = load i32, ptr %t452 - %t456 = icmp sge i32 %t454, %t455 - br i1 %t456, label %grow65, label %put66 + %t181 = load ptr, ptr %t168 + %t182 = getelementptr inbounds ptr, ptr %t181, i32 %t169 + store ptr @.str2874, ptr %t182 + %t183 = add i32 %t169, 1 + store i32 %t183, ptr %t166 + %t184 = load ptr, ptr %t98 + %t185 = getelementptr inbounds %LSlice, ptr %t184, i32 0, i32 1 + %t186 = getelementptr inbounds %LSlice, ptr %t184, i32 0, i32 2 + %t187 = getelementptr inbounds %LSlice, ptr %t184, i32 0, i32 0 + %t188 = load i32, ptr %t185 + %t189 = load i32, ptr %t186 + %t190 = icmp sge i32 %t188, %t189 + br i1 %t190, label %grow65, label %put66 grow65: - %t457 = mul i32 %t455, 2 - %t458 = icmp eq i32 %t455, 0 - %t459 = select i1 %t458, i32 8, i32 %t457 - %t460 = getelementptr ptr, ptr null, i32 1 - %t461 = ptrtoint ptr %t460 to i64 - %t462 = zext i32 %t459 to i64 - %t463 = mul i64 %t462, %t461 - %t464 = load ptr, ptr %t453 - %t465 = call ptr @realloc(ptr %t464, i64 %t463) - store ptr %t465, ptr %t453 - store i32 %t459, ptr %t452 + %t191 = mul i32 %t189, 2 + %t192 = icmp eq i32 %t189, 0 + %t193 = select i1 %t192, i32 8, i32 %t191 + %t194 = getelementptr ptr, ptr null, i32 1 + %t195 = ptrtoint ptr %t194 to i64 + %t196 = zext i32 %t193 to i64 + %t197 = mul i64 %t196, %t195 + %t198 = load ptr, ptr %t187 + %t199 = call ptr @realloc(ptr %t198, i64 %t197) + store ptr %t199, ptr %t187 + store i32 %t193, ptr %t186 br label %put66 put66: - %t466 = load ptr, ptr %t453 - %t467 = getelementptr inbounds ptr, ptr %t466, i32 %t454 - store ptr @.str1209, ptr %t467 - %t468 = add i32 %t454, 1 - store i32 %t468, ptr %t451 - %t469 = load ptr, ptr %t10 - %t470 = getelementptr inbounds %LSlice, ptr %t469, i32 0, i32 1 - %t471 = getelementptr inbounds %LSlice, ptr %t469, i32 0, i32 2 - %t472 = getelementptr inbounds %LSlice, ptr %t469, i32 0, i32 0 - %t473 = load i32, ptr %t470 - %t474 = load i32, ptr %t471 - %t475 = icmp sge i32 %t473, %t474 - br i1 %t475, label %grow67, label %put68 + %t200 = load ptr, ptr %t187 + %t201 = getelementptr inbounds ptr, ptr %t200, i32 %t188 + store ptr @.str2875, ptr %t201 + %t202 = add i32 %t188, 1 + store i32 %t202, ptr %t185 + %t203 = load ptr, ptr %t98 + %t204 = getelementptr inbounds %LSlice, ptr %t203, i32 0, i32 1 + %t205 = getelementptr inbounds %LSlice, ptr %t203, i32 0, i32 2 + %t206 = getelementptr inbounds %LSlice, ptr %t203, i32 0, i32 0 + %t207 = load i32, ptr %t204 + %t208 = load i32, ptr %t205 + %t209 = icmp sge i32 %t207, %t208 + br i1 %t209, label %grow67, label %put68 grow67: - %t476 = mul i32 %t474, 2 - %t477 = icmp eq i32 %t474, 0 - %t478 = select i1 %t477, i32 8, i32 %t476 - %t479 = getelementptr ptr, ptr null, i32 1 - %t480 = ptrtoint ptr %t479 to i64 - %t481 = zext i32 %t478 to i64 - %t482 = mul i64 %t481, %t480 - %t483 = load ptr, ptr %t472 - %t484 = call ptr @realloc(ptr %t483, i64 %t482) - store ptr %t484, ptr %t472 - store i32 %t478, ptr %t471 + %t210 = mul i32 %t208, 2 + %t211 = icmp eq i32 %t208, 0 + %t212 = select i1 %t211, i32 8, i32 %t210 + %t213 = getelementptr ptr, ptr null, i32 1 + %t214 = ptrtoint ptr %t213 to i64 + %t215 = zext i32 %t212 to i64 + %t216 = mul i64 %t215, %t214 + %t217 = load ptr, ptr %t206 + %t218 = call ptr @realloc(ptr %t217, i64 %t216) + store ptr %t218, ptr %t206 + store i32 %t212, ptr %t205 br label %put68 put68: - %t485 = load ptr, ptr %t472 - %t486 = getelementptr inbounds ptr, ptr %t485, i32 %t473 - store ptr @.str1210, ptr %t486 - %t487 = add i32 %t473, 1 - store i32 %t487, ptr %t470 + %t219 = load ptr, ptr %t206 + %t220 = getelementptr inbounds ptr, ptr %t219, i32 %t207 + store ptr @.str2876, ptr %t220 + %t221 = add i32 %t207, 1 + store i32 %t221, ptr %t204 br label %ifend58 ifend58: - %t488 = load ptr, ptr %t1 - %t489 = call i32 @fn_str_eq(ptr %t488, ptr @.str1211) - %t490 = icmp ne i32 %t489, 0 - br i1 %t490, label %then69, label %ifend71 + %t222 = load ptr, ptr %t1 + %t223 = call i32 @fn_str_eq(ptr %t222, ptr @.str2877) + %t224 = icmp ne i32 %t223, 0 + br i1 %t224, label %then69, label %ifend71 then69: - store ptr @.str1212, ptr %t3 + store ptr @.str2878, ptr %t91 + %t225 = load ptr, ptr %t98 + %t226 = getelementptr inbounds %LSlice, ptr %t225, i32 0, i32 1 + %t227 = getelementptr inbounds %LSlice, ptr %t225, i32 0, i32 2 + %t228 = getelementptr inbounds %LSlice, ptr %t225, i32 0, i32 0 + %t229 = load i32, ptr %t226 + %t230 = load i32, ptr %t227 + %t231 = icmp sge i32 %t229, %t230 + br i1 %t231, label %grow72, label %put73 +grow72: + %t232 = mul i32 %t230, 2 + %t233 = icmp eq i32 %t230, 0 + %t234 = select i1 %t233, i32 8, i32 %t232 + %t235 = getelementptr ptr, ptr null, i32 1 + %t236 = ptrtoint ptr %t235 to i64 + %t237 = zext i32 %t234 to i64 + %t238 = mul i64 %t237, %t236 + %t239 = load ptr, ptr %t228 + %t240 = call ptr @realloc(ptr %t239, i64 %t238) + store ptr %t240, ptr %t228 + store i32 %t234, ptr %t227 + br label %put73 +put73: + %t241 = load ptr, ptr %t228 + %t242 = getelementptr inbounds ptr, ptr %t241, i32 %t229 + store ptr @.str2879, ptr %t242 + %t243 = add i32 %t229, 1 + store i32 %t243, ptr %t226 + %t244 = load ptr, ptr %t98 + %t245 = getelementptr inbounds %LSlice, ptr %t244, i32 0, i32 1 + %t246 = getelementptr inbounds %LSlice, ptr %t244, i32 0, i32 2 + %t247 = getelementptr inbounds %LSlice, ptr %t244, i32 0, i32 0 + %t248 = load i32, ptr %t245 + %t249 = load i32, ptr %t246 + %t250 = icmp sge i32 %t248, %t249 + br i1 %t250, label %grow74, label %put75 +grow74: + %t251 = mul i32 %t249, 2 + %t252 = icmp eq i32 %t249, 0 + %t253 = select i1 %t252, i32 8, i32 %t251 + %t254 = getelementptr ptr, ptr null, i32 1 + %t255 = ptrtoint ptr %t254 to i64 + %t256 = zext i32 %t253 to i64 + %t257 = mul i64 %t256, %t255 + %t258 = load ptr, ptr %t247 + %t259 = call ptr @realloc(ptr %t258, i64 %t257) + store ptr %t259, ptr %t247 + store i32 %t253, ptr %t246 + br label %put75 +put75: + %t260 = load ptr, ptr %t247 + %t261 = getelementptr inbounds ptr, ptr %t260, i32 %t248 + store ptr @.str2880, ptr %t261 + %t262 = add i32 %t248, 1 + store i32 %t262, ptr %t245 + %t263 = load ptr, ptr %t98 + %t264 = getelementptr inbounds %LSlice, ptr %t263, i32 0, i32 1 + %t265 = getelementptr inbounds %LSlice, ptr %t263, i32 0, i32 2 + %t266 = getelementptr inbounds %LSlice, ptr %t263, i32 0, i32 0 + %t267 = load i32, ptr %t264 + %t268 = load i32, ptr %t265 + %t269 = icmp sge i32 %t267, %t268 + br i1 %t269, label %grow76, label %put77 +grow76: + %t270 = mul i32 %t268, 2 + %t271 = icmp eq i32 %t268, 0 + %t272 = select i1 %t271, i32 8, i32 %t270 + %t273 = getelementptr ptr, ptr null, i32 1 + %t274 = ptrtoint ptr %t273 to i64 + %t275 = zext i32 %t272 to i64 + %t276 = mul i64 %t275, %t274 + %t277 = load ptr, ptr %t266 + %t278 = call ptr @realloc(ptr %t277, i64 %t276) + store ptr %t278, ptr %t266 + store i32 %t272, ptr %t265 + br label %put77 +put77: + %t279 = load ptr, ptr %t266 + %t280 = getelementptr inbounds ptr, ptr %t279, i32 %t267 + store ptr @.str2881, ptr %t280 + %t281 = add i32 %t267, 1 + store i32 %t281, ptr %t264 + %t282 = load ptr, ptr %t98 + %t283 = getelementptr inbounds %LSlice, ptr %t282, i32 0, i32 1 + %t284 = getelementptr inbounds %LSlice, ptr %t282, i32 0, i32 2 + %t285 = getelementptr inbounds %LSlice, ptr %t282, i32 0, i32 0 + %t286 = load i32, ptr %t283 + %t287 = load i32, ptr %t284 + %t288 = icmp sge i32 %t286, %t287 + br i1 %t288, label %grow78, label %put79 +grow78: + %t289 = mul i32 %t287, 2 + %t290 = icmp eq i32 %t287, 0 + %t291 = select i1 %t290, i32 8, i32 %t289 + %t292 = getelementptr ptr, ptr null, i32 1 + %t293 = ptrtoint ptr %t292 to i64 + %t294 = zext i32 %t291 to i64 + %t295 = mul i64 %t294, %t293 + %t296 = load ptr, ptr %t285 + %t297 = call ptr @realloc(ptr %t296, i64 %t295) + store ptr %t297, ptr %t285 + store i32 %t291, ptr %t284 + br label %put79 +put79: + %t298 = load ptr, ptr %t285 + %t299 = getelementptr inbounds ptr, ptr %t298, i32 %t286 + store ptr @.str2882, ptr %t299 + %t300 = add i32 %t286, 1 + store i32 %t300, ptr %t283 + %t301 = load ptr, ptr %t98 + %t302 = getelementptr inbounds %LSlice, ptr %t301, i32 0, i32 1 + %t303 = getelementptr inbounds %LSlice, ptr %t301, i32 0, i32 2 + %t304 = getelementptr inbounds %LSlice, ptr %t301, i32 0, i32 0 + %t305 = load i32, ptr %t302 + %t306 = load i32, ptr %t303 + %t307 = icmp sge i32 %t305, %t306 + br i1 %t307, label %grow80, label %put81 +grow80: + %t308 = mul i32 %t306, 2 + %t309 = icmp eq i32 %t306, 0 + %t310 = select i1 %t309, i32 8, i32 %t308 + %t311 = getelementptr ptr, ptr null, i32 1 + %t312 = ptrtoint ptr %t311 to i64 + %t313 = zext i32 %t310 to i64 + %t314 = mul i64 %t313, %t312 + %t315 = load ptr, ptr %t304 + %t316 = call ptr @realloc(ptr %t315, i64 %t314) + store ptr %t316, ptr %t304 + store i32 %t310, ptr %t303 + br label %put81 +put81: + %t317 = load ptr, ptr %t304 + %t318 = getelementptr inbounds ptr, ptr %t317, i32 %t305 + store ptr @.str2883, ptr %t318 + %t319 = add i32 %t305, 1 + store i32 %t319, ptr %t302 br label %ifend71 ifend71: - %t491 = load ptr, ptr %t1 - %t492 = call i32 @fn_str_eq(ptr %t491, ptr @.str1213) - %t493 = icmp ne i32 %t492, 0 - br i1 %t493, label %then72, label %ifend74 -then72: - store ptr @.str1214, ptr %t3 - br label %ifend74 -ifend74: - %t494 = load ptr, ptr %t1 - %t495 = call i32 @fn_str_eq(ptr %t494, ptr @.str1215) - %t496 = icmp ne i32 %t495, 0 - br i1 %t496, label %then75, label %ifend77 -then75: - store ptr @.str1216, ptr %t3 - br label %ifend77 -ifend77: - %t497 = load ptr, ptr %t1 - %t498 = call i32 @fn_str_eq(ptr %t497, ptr @.str1217) - %t499 = icmp ne i32 %t498, 0 - br i1 %t499, label %then78, label %ifend80 -then78: - store ptr @.str1218, ptr %t3 - %t500 = load ptr, ptr %t10 + %t320 = load ptr, ptr %t1 + %t321 = call i32 @fn_str_eq(ptr %t320, ptr @.str2884) + %t322 = icmp ne i32 %t321, 0 + br i1 %t322, label %then82, label %ifend84 +then82: + store ptr @.str2885, ptr %t91 + %t323 = load ptr, ptr %t98 + %t324 = getelementptr inbounds %LSlice, ptr %t323, i32 0, i32 1 + %t325 = getelementptr inbounds %LSlice, ptr %t323, i32 0, i32 2 + %t326 = getelementptr inbounds %LSlice, ptr %t323, i32 0, i32 0 + %t327 = load i32, ptr %t324 + %t328 = load i32, ptr %t325 + %t329 = icmp sge i32 %t327, %t328 + br i1 %t329, label %grow85, label %put86 +grow85: + %t330 = mul i32 %t328, 2 + %t331 = icmp eq i32 %t328, 0 + %t332 = select i1 %t331, i32 8, i32 %t330 + %t333 = getelementptr ptr, ptr null, i32 1 + %t334 = ptrtoint ptr %t333 to i64 + %t335 = zext i32 %t332 to i64 + %t336 = mul i64 %t335, %t334 + %t337 = load ptr, ptr %t326 + %t338 = call ptr @realloc(ptr %t337, i64 %t336) + store ptr %t338, ptr %t326 + store i32 %t332, ptr %t325 + br label %put86 +put86: + %t339 = load ptr, ptr %t326 + %t340 = getelementptr inbounds ptr, ptr %t339, i32 %t327 + store ptr @.str2886, ptr %t340 + %t341 = add i32 %t327, 1 + store i32 %t341, ptr %t324 + %t342 = load ptr, ptr %t98 + %t343 = getelementptr inbounds %LSlice, ptr %t342, i32 0, i32 1 + %t344 = getelementptr inbounds %LSlice, ptr %t342, i32 0, i32 2 + %t345 = getelementptr inbounds %LSlice, ptr %t342, i32 0, i32 0 + %t346 = load i32, ptr %t343 + %t347 = load i32, ptr %t344 + %t348 = icmp sge i32 %t346, %t347 + br i1 %t348, label %grow87, label %put88 +grow87: + %t349 = mul i32 %t347, 2 + %t350 = icmp eq i32 %t347, 0 + %t351 = select i1 %t350, i32 8, i32 %t349 + %t352 = getelementptr ptr, ptr null, i32 1 + %t353 = ptrtoint ptr %t352 to i64 + %t354 = zext i32 %t351 to i64 + %t355 = mul i64 %t354, %t353 + %t356 = load ptr, ptr %t345 + %t357 = call ptr @realloc(ptr %t356, i64 %t355) + store ptr %t357, ptr %t345 + store i32 %t351, ptr %t344 + br label %put88 +put88: + %t358 = load ptr, ptr %t345 + %t359 = getelementptr inbounds ptr, ptr %t358, i32 %t346 + store ptr @.str2887, ptr %t359 + %t360 = add i32 %t346, 1 + store i32 %t360, ptr %t343 + %t361 = load ptr, ptr %t98 + %t362 = getelementptr inbounds %LSlice, ptr %t361, i32 0, i32 1 + %t363 = getelementptr inbounds %LSlice, ptr %t361, i32 0, i32 2 + %t364 = getelementptr inbounds %LSlice, ptr %t361, i32 0, i32 0 + %t365 = load i32, ptr %t362 + %t366 = load i32, ptr %t363 + %t367 = icmp sge i32 %t365, %t366 + br i1 %t367, label %grow89, label %put90 +grow89: + %t368 = mul i32 %t366, 2 + %t369 = icmp eq i32 %t366, 0 + %t370 = select i1 %t369, i32 8, i32 %t368 + %t371 = getelementptr ptr, ptr null, i32 1 + %t372 = ptrtoint ptr %t371 to i64 + %t373 = zext i32 %t370 to i64 + %t374 = mul i64 %t373, %t372 + %t375 = load ptr, ptr %t364 + %t376 = call ptr @realloc(ptr %t375, i64 %t374) + store ptr %t376, ptr %t364 + store i32 %t370, ptr %t363 + br label %put90 +put90: + %t377 = load ptr, ptr %t364 + %t378 = getelementptr inbounds ptr, ptr %t377, i32 %t365 + store ptr @.str2888, ptr %t378 + %t379 = add i32 %t365, 1 + store i32 %t379, ptr %t362 + br label %ifend84 +ifend84: + %t380 = load ptr, ptr %t1 + %t381 = call i32 @fn_str_eq(ptr %t380, ptr @.str2889) + %t382 = icmp ne i32 %t381, 0 + br i1 %t382, label %then91, label %ifend93 +then91: + store ptr @.str2890, ptr %t91 + %t383 = load ptr, ptr %t98 + %t384 = getelementptr inbounds %LSlice, ptr %t383, i32 0, i32 1 + %t385 = getelementptr inbounds %LSlice, ptr %t383, i32 0, i32 2 + %t386 = getelementptr inbounds %LSlice, ptr %t383, i32 0, i32 0 + %t387 = load i32, ptr %t384 + %t388 = load i32, ptr %t385 + %t389 = icmp sge i32 %t387, %t388 + br i1 %t389, label %grow94, label %put95 +grow94: + %t390 = mul i32 %t388, 2 + %t391 = icmp eq i32 %t388, 0 + %t392 = select i1 %t391, i32 8, i32 %t390 + %t393 = getelementptr ptr, ptr null, i32 1 + %t394 = ptrtoint ptr %t393 to i64 + %t395 = zext i32 %t392 to i64 + %t396 = mul i64 %t395, %t394 + %t397 = load ptr, ptr %t386 + %t398 = call ptr @realloc(ptr %t397, i64 %t396) + store ptr %t398, ptr %t386 + store i32 %t392, ptr %t385 + br label %put95 +put95: + %t399 = load ptr, ptr %t386 + %t400 = getelementptr inbounds ptr, ptr %t399, i32 %t387 + store ptr @.str2891, ptr %t400 + %t401 = add i32 %t387, 1 + store i32 %t401, ptr %t384 + %t402 = load ptr, ptr %t98 + %t403 = getelementptr inbounds %LSlice, ptr %t402, i32 0, i32 1 + %t404 = getelementptr inbounds %LSlice, ptr %t402, i32 0, i32 2 + %t405 = getelementptr inbounds %LSlice, ptr %t402, i32 0, i32 0 + %t406 = load i32, ptr %t403 + %t407 = load i32, ptr %t404 + %t408 = icmp sge i32 %t406, %t407 + br i1 %t408, label %grow96, label %put97 +grow96: + %t409 = mul i32 %t407, 2 + %t410 = icmp eq i32 %t407, 0 + %t411 = select i1 %t410, i32 8, i32 %t409 + %t412 = getelementptr ptr, ptr null, i32 1 + %t413 = ptrtoint ptr %t412 to i64 + %t414 = zext i32 %t411 to i64 + %t415 = mul i64 %t414, %t413 + %t416 = load ptr, ptr %t405 + %t417 = call ptr @realloc(ptr %t416, i64 %t415) + store ptr %t417, ptr %t405 + store i32 %t411, ptr %t404 + br label %put97 +put97: + %t418 = load ptr, ptr %t405 + %t419 = getelementptr inbounds ptr, ptr %t418, i32 %t406 + store ptr @.str2892, ptr %t419 + %t420 = add i32 %t406, 1 + store i32 %t420, ptr %t403 + %t421 = load ptr, ptr %t98 + %t422 = getelementptr inbounds %LSlice, ptr %t421, i32 0, i32 1 + %t423 = getelementptr inbounds %LSlice, ptr %t421, i32 0, i32 2 + %t424 = getelementptr inbounds %LSlice, ptr %t421, i32 0, i32 0 + %t425 = load i32, ptr %t422 + %t426 = load i32, ptr %t423 + %t427 = icmp sge i32 %t425, %t426 + br i1 %t427, label %grow98, label %put99 +grow98: + %t428 = mul i32 %t426, 2 + %t429 = icmp eq i32 %t426, 0 + %t430 = select i1 %t429, i32 8, i32 %t428 + %t431 = getelementptr ptr, ptr null, i32 1 + %t432 = ptrtoint ptr %t431 to i64 + %t433 = zext i32 %t430 to i64 + %t434 = mul i64 %t433, %t432 + %t435 = load ptr, ptr %t424 + %t436 = call ptr @realloc(ptr %t435, i64 %t434) + store ptr %t436, ptr %t424 + store i32 %t430, ptr %t423 + br label %put99 +put99: + %t437 = load ptr, ptr %t424 + %t438 = getelementptr inbounds ptr, ptr %t437, i32 %t425 + store ptr @.str2893, ptr %t438 + %t439 = add i32 %t425, 1 + store i32 %t439, ptr %t422 + %t440 = load ptr, ptr %t98 + %t441 = getelementptr inbounds %LSlice, ptr %t440, i32 0, i32 1 + %t442 = getelementptr inbounds %LSlice, ptr %t440, i32 0, i32 2 + %t443 = getelementptr inbounds %LSlice, ptr %t440, i32 0, i32 0 + %t444 = load i32, ptr %t441 + %t445 = load i32, ptr %t442 + %t446 = icmp sge i32 %t444, %t445 + br i1 %t446, label %grow100, label %put101 +grow100: + %t447 = mul i32 %t445, 2 + %t448 = icmp eq i32 %t445, 0 + %t449 = select i1 %t448, i32 8, i32 %t447 + %t450 = getelementptr ptr, ptr null, i32 1 + %t451 = ptrtoint ptr %t450 to i64 + %t452 = zext i32 %t449 to i64 + %t453 = mul i64 %t452, %t451 + %t454 = load ptr, ptr %t443 + %t455 = call ptr @realloc(ptr %t454, i64 %t453) + store ptr %t455, ptr %t443 + store i32 %t449, ptr %t442 + br label %put101 +put101: + %t456 = load ptr, ptr %t443 + %t457 = getelementptr inbounds ptr, ptr %t456, i32 %t444 + store ptr @.str2894, ptr %t457 + %t458 = add i32 %t444, 1 + store i32 %t458, ptr %t441 + %t459 = load ptr, ptr %t98 + %t460 = getelementptr inbounds %LSlice, ptr %t459, i32 0, i32 1 + %t461 = getelementptr inbounds %LSlice, ptr %t459, i32 0, i32 2 + %t462 = getelementptr inbounds %LSlice, ptr %t459, i32 0, i32 0 + %t463 = load i32, ptr %t460 + %t464 = load i32, ptr %t461 + %t465 = icmp sge i32 %t463, %t464 + br i1 %t465, label %grow102, label %put103 +grow102: + %t466 = mul i32 %t464, 2 + %t467 = icmp eq i32 %t464, 0 + %t468 = select i1 %t467, i32 8, i32 %t466 + %t469 = getelementptr ptr, ptr null, i32 1 + %t470 = ptrtoint ptr %t469 to i64 + %t471 = zext i32 %t468 to i64 + %t472 = mul i64 %t471, %t470 + %t473 = load ptr, ptr %t462 + %t474 = call ptr @realloc(ptr %t473, i64 %t472) + store ptr %t474, ptr %t462 + store i32 %t468, ptr %t461 + br label %put103 +put103: + %t475 = load ptr, ptr %t462 + %t476 = getelementptr inbounds ptr, ptr %t475, i32 %t463 + store ptr @.str2895, ptr %t476 + %t477 = add i32 %t463, 1 + store i32 %t477, ptr %t460 + br label %ifend93 +ifend93: + %t478 = load ptr, ptr %t1 + %t479 = call i32 @fn_str_eq(ptr %t478, ptr @.str2896) + %t480 = icmp ne i32 %t479, 0 + br i1 %t480, label %then104, label %ifend106 +then104: + store ptr @.str2897, ptr %t91 + %t481 = load ptr, ptr %t98 + %t482 = getelementptr inbounds %LSlice, ptr %t481, i32 0, i32 1 + %t483 = getelementptr inbounds %LSlice, ptr %t481, i32 0, i32 2 + %t484 = getelementptr inbounds %LSlice, ptr %t481, i32 0, i32 0 + %t485 = load i32, ptr %t482 + %t486 = load i32, ptr %t483 + %t487 = icmp sge i32 %t485, %t486 + br i1 %t487, label %grow107, label %put108 +grow107: + %t488 = mul i32 %t486, 2 + %t489 = icmp eq i32 %t486, 0 + %t490 = select i1 %t489, i32 8, i32 %t488 + %t491 = getelementptr ptr, ptr null, i32 1 + %t492 = ptrtoint ptr %t491 to i64 + %t493 = zext i32 %t490 to i64 + %t494 = mul i64 %t493, %t492 + %t495 = load ptr, ptr %t484 + %t496 = call ptr @realloc(ptr %t495, i64 %t494) + store ptr %t496, ptr %t484 + store i32 %t490, ptr %t483 + br label %put108 +put108: + %t497 = load ptr, ptr %t484 + %t498 = getelementptr inbounds ptr, ptr %t497, i32 %t485 + store ptr @.str2898, ptr %t498 + %t499 = add i32 %t485, 1 + store i32 %t499, ptr %t482 + %t500 = load ptr, ptr %t98 %t501 = getelementptr inbounds %LSlice, ptr %t500, i32 0, i32 1 %t502 = getelementptr inbounds %LSlice, ptr %t500, i32 0, i32 2 %t503 = getelementptr inbounds %LSlice, ptr %t500, i32 0, i32 0 %t504 = load i32, ptr %t501 %t505 = load i32, ptr %t502 %t506 = icmp sge i32 %t504, %t505 - br i1 %t506, label %grow81, label %put82 -grow81: + br i1 %t506, label %grow109, label %put110 +grow109: %t507 = mul i32 %t505, 2 %t508 = icmp eq i32 %t505, 0 %t509 = select i1 %t508, i32 8, i32 %t507 @@ -21173,398 +30812,1919 @@ grow81: %t515 = call ptr @realloc(ptr %t514, i64 %t513) store ptr %t515, ptr %t503 store i32 %t509, ptr %t502 - br label %put82 -put82: + br label %put110 +put110: %t516 = load ptr, ptr %t503 %t517 = getelementptr inbounds ptr, ptr %t516, i32 %t504 - store ptr @.str1219, ptr %t517 + store ptr @.str2899, ptr %t517 %t518 = add i32 %t504, 1 store i32 %t518, ptr %t501 - br label %ifend80 -ifend80: - br label %ifend2 -ifend2: - %t519 = load ptr, ptr %t0 - %t520 = call i32 @fn_str_eq(ptr %t519, ptr @.str1220) - %t521 = icmp ne i32 %t520, 0 - br i1 %t521, label %then83, label %ifend85 -then83: - %t522 = load ptr, ptr %t1 - %t523 = call i32 @fn_str_eq(ptr %t522, ptr @.str1221) - %t524 = icmp ne i32 %t523, 0 - br i1 %t524, label %then86, label %ifend88 -then86: - store ptr @.str1222, ptr %t3 - %t525 = load ptr, ptr %t10 - %t526 = getelementptr inbounds %LSlice, ptr %t525, i32 0, i32 1 - %t527 = getelementptr inbounds %LSlice, ptr %t525, i32 0, i32 2 - %t528 = getelementptr inbounds %LSlice, ptr %t525, i32 0, i32 0 - %t529 = load i32, ptr %t526 - %t530 = load i32, ptr %t527 - %t531 = icmp sge i32 %t529, %t530 - br i1 %t531, label %grow89, label %put90 -grow89: - %t532 = mul i32 %t530, 2 - %t533 = icmp eq i32 %t530, 0 - %t534 = select i1 %t533, i32 8, i32 %t532 - %t535 = getelementptr ptr, ptr null, i32 1 - %t536 = ptrtoint ptr %t535 to i64 - %t537 = zext i32 %t534 to i64 - %t538 = mul i64 %t537, %t536 - %t539 = load ptr, ptr %t528 - %t540 = call ptr @realloc(ptr %t539, i64 %t538) - store ptr %t540, ptr %t528 - store i32 %t534, ptr %t527 - br label %put90 -put90: - %t541 = load ptr, ptr %t528 - %t542 = getelementptr inbounds ptr, ptr %t541, i32 %t529 - store ptr @.str1223, ptr %t542 - %t543 = add i32 %t529, 1 - store i32 %t543, ptr %t526 - %t544 = load ptr, ptr %t10 - %t545 = getelementptr inbounds %LSlice, ptr %t544, i32 0, i32 1 - %t546 = getelementptr inbounds %LSlice, ptr %t544, i32 0, i32 2 - %t547 = getelementptr inbounds %LSlice, ptr %t544, i32 0, i32 0 - %t548 = load i32, ptr %t545 - %t549 = load i32, ptr %t546 - %t550 = icmp sge i32 %t548, %t549 - br i1 %t550, label %grow91, label %put92 -grow91: - %t551 = mul i32 %t549, 2 - %t552 = icmp eq i32 %t549, 0 - %t553 = select i1 %t552, i32 8, i32 %t551 - %t554 = getelementptr ptr, ptr null, i32 1 - %t555 = ptrtoint ptr %t554 to i64 - %t556 = zext i32 %t553 to i64 - %t557 = mul i64 %t556, %t555 - %t558 = load ptr, ptr %t547 - %t559 = call ptr @realloc(ptr %t558, i64 %t557) - store ptr %t559, ptr %t547 - store i32 %t553, ptr %t546 - br label %put92 -put92: - %t560 = load ptr, ptr %t547 - %t561 = getelementptr inbounds ptr, ptr %t560, i32 %t548 - store ptr @.str1224, ptr %t561 - %t562 = add i32 %t548, 1 - store i32 %t562, ptr %t545 - br label %ifend88 -ifend88: - %t563 = load ptr, ptr %t1 - %t564 = call i32 @fn_str_eq(ptr %t563, ptr @.str1225) - %t565 = icmp ne i32 %t564, 0 - br i1 %t565, label %then93, label %ifend95 -then93: - store ptr @.str1226, ptr %t3 - %t566 = load ptr, ptr %t10 - %t567 = getelementptr inbounds %LSlice, ptr %t566, i32 0, i32 1 - %t568 = getelementptr inbounds %LSlice, ptr %t566, i32 0, i32 2 - %t569 = getelementptr inbounds %LSlice, ptr %t566, i32 0, i32 0 - %t570 = load i32, ptr %t567 - %t571 = load i32, ptr %t568 - %t572 = icmp sge i32 %t570, %t571 - br i1 %t572, label %grow96, label %put97 -grow96: - %t573 = mul i32 %t571, 2 - %t574 = icmp eq i32 %t571, 0 - %t575 = select i1 %t574, i32 8, i32 %t573 - %t576 = getelementptr ptr, ptr null, i32 1 - %t577 = ptrtoint ptr %t576 to i64 - %t578 = zext i32 %t575 to i64 - %t579 = mul i64 %t578, %t577 - %t580 = load ptr, ptr %t569 - %t581 = call ptr @realloc(ptr %t580, i64 %t579) - store ptr %t581, ptr %t569 - store i32 %t575, ptr %t568 - br label %put97 -put97: - %t582 = load ptr, ptr %t569 - %t583 = getelementptr inbounds ptr, ptr %t582, i32 %t570 - store ptr @.str1227, ptr %t583 - %t584 = add i32 %t570, 1 - store i32 %t584, ptr %t567 - %t585 = load ptr, ptr %t10 - %t586 = getelementptr inbounds %LSlice, ptr %t585, i32 0, i32 1 - %t587 = getelementptr inbounds %LSlice, ptr %t585, i32 0, i32 2 - %t588 = getelementptr inbounds %LSlice, ptr %t585, i32 0, i32 0 - %t589 = load i32, ptr %t586 - %t590 = load i32, ptr %t587 - %t591 = icmp sge i32 %t589, %t590 - br i1 %t591, label %grow98, label %put99 -grow98: - %t592 = mul i32 %t590, 2 - %t593 = icmp eq i32 %t590, 0 - %t594 = select i1 %t593, i32 8, i32 %t592 - %t595 = getelementptr ptr, ptr null, i32 1 - %t596 = ptrtoint ptr %t595 to i64 - %t597 = zext i32 %t594 to i64 - %t598 = mul i64 %t597, %t596 - %t599 = load ptr, ptr %t588 - %t600 = call ptr @realloc(ptr %t599, i64 %t598) - store ptr %t600, ptr %t588 - store i32 %t594, ptr %t587 - br label %put99 -put99: - %t601 = load ptr, ptr %t588 - %t602 = getelementptr inbounds ptr, ptr %t601, i32 %t589 - store ptr @.str1228, ptr %t602 - %t603 = add i32 %t589, 1 - store i32 %t603, ptr %t586 - br label %ifend95 -ifend95: - %t604 = load ptr, ptr %t1 - %t605 = call i32 @fn_str_eq(ptr %t604, ptr @.str1229) - %t606 = icmp ne i32 %t605, 0 - br i1 %t606, label %then100, label %ifend102 -then100: - store ptr @.str1230, ptr %t3 - %t607 = load ptr, ptr %t10 - %t608 = getelementptr inbounds %LSlice, ptr %t607, i32 0, i32 1 - %t609 = getelementptr inbounds %LSlice, ptr %t607, i32 0, i32 2 - %t610 = getelementptr inbounds %LSlice, ptr %t607, i32 0, i32 0 - %t611 = load i32, ptr %t608 - %t612 = load i32, ptr %t609 - %t613 = icmp sge i32 %t611, %t612 - br i1 %t613, label %grow103, label %put104 -grow103: - %t614 = mul i32 %t612, 2 - %t615 = icmp eq i32 %t612, 0 - %t616 = select i1 %t615, i32 8, i32 %t614 - %t617 = getelementptr ptr, ptr null, i32 1 - %t618 = ptrtoint ptr %t617 to i64 - %t619 = zext i32 %t616 to i64 - %t620 = mul i64 %t619, %t618 - %t621 = load ptr, ptr %t610 - %t622 = call ptr @realloc(ptr %t621, i64 %t620) - store ptr %t622, ptr %t610 - store i32 %t616, ptr %t609 - br label %put104 -put104: - %t623 = load ptr, ptr %t610 - %t624 = getelementptr inbounds ptr, ptr %t623, i32 %t611 - store ptr @.str1231, ptr %t624 - %t625 = add i32 %t611, 1 - store i32 %t625, ptr %t608 - %t626 = load ptr, ptr %t10 - %t627 = getelementptr inbounds %LSlice, ptr %t626, i32 0, i32 1 - %t628 = getelementptr inbounds %LSlice, ptr %t626, i32 0, i32 2 - %t629 = getelementptr inbounds %LSlice, ptr %t626, i32 0, i32 0 - %t630 = load i32, ptr %t627 - %t631 = load i32, ptr %t628 - %t632 = icmp sge i32 %t630, %t631 - br i1 %t632, label %grow105, label %put106 -grow105: - %t633 = mul i32 %t631, 2 - %t634 = icmp eq i32 %t631, 0 - %t635 = select i1 %t634, i32 8, i32 %t633 - %t636 = getelementptr ptr, ptr null, i32 1 - %t637 = ptrtoint ptr %t636 to i64 - %t638 = zext i32 %t635 to i64 - %t639 = mul i64 %t638, %t637 - %t640 = load ptr, ptr %t629 - %t641 = call ptr @realloc(ptr %t640, i64 %t639) - store ptr %t641, ptr %t629 - store i32 %t635, ptr %t628 - br label %put106 -put106: - %t642 = load ptr, ptr %t629 - %t643 = getelementptr inbounds ptr, ptr %t642, i32 %t630 - store ptr @.str1232, ptr %t643 - %t644 = add i32 %t630, 1 - store i32 %t644, ptr %t627 - br label %ifend102 -ifend102: - br label %ifend85 -ifend85: - %t645 = load ptr, ptr %t0 - %t646 = call i32 @fn_str_eq(ptr %t645, ptr @.str1233) - %t647 = icmp ne i32 %t646, 0 - br i1 %t647, label %then107, label %ifend109 -then107: - %t648 = load ptr, ptr %t1 - %t649 = call i32 @fn_str_eq(ptr %t648, ptr @.str1234) - %t650 = icmp ne i32 %t649, 0 - br i1 %t650, label %then110, label %ifend112 -then110: - store ptr @.str1235, ptr %t3 - %t651 = load ptr, ptr %t10 - %t652 = getelementptr inbounds %LSlice, ptr %t651, i32 0, i32 1 - %t653 = getelementptr inbounds %LSlice, ptr %t651, i32 0, i32 2 - %t654 = getelementptr inbounds %LSlice, ptr %t651, i32 0, i32 0 - %t655 = load i32, ptr %t652 - %t656 = load i32, ptr %t653 - %t657 = icmp sge i32 %t655, %t656 - br i1 %t657, label %grow113, label %put114 + %t519 = load ptr, ptr %t98 + %t520 = getelementptr inbounds %LSlice, ptr %t519, i32 0, i32 1 + %t521 = getelementptr inbounds %LSlice, ptr %t519, i32 0, i32 2 + %t522 = getelementptr inbounds %LSlice, ptr %t519, i32 0, i32 0 + %t523 = load i32, ptr %t520 + %t524 = load i32, ptr %t521 + %t525 = icmp sge i32 %t523, %t524 + br i1 %t525, label %grow111, label %put112 +grow111: + %t526 = mul i32 %t524, 2 + %t527 = icmp eq i32 %t524, 0 + %t528 = select i1 %t527, i32 8, i32 %t526 + %t529 = getelementptr ptr, ptr null, i32 1 + %t530 = ptrtoint ptr %t529 to i64 + %t531 = zext i32 %t528 to i64 + %t532 = mul i64 %t531, %t530 + %t533 = load ptr, ptr %t522 + %t534 = call ptr @realloc(ptr %t533, i64 %t532) + store ptr %t534, ptr %t522 + store i32 %t528, ptr %t521 + br label %put112 +put112: + %t535 = load ptr, ptr %t522 + %t536 = getelementptr inbounds ptr, ptr %t535, i32 %t523 + store ptr @.str2900, ptr %t536 + %t537 = add i32 %t523, 1 + store i32 %t537, ptr %t520 + %t538 = load ptr, ptr %t98 + %t539 = getelementptr inbounds %LSlice, ptr %t538, i32 0, i32 1 + %t540 = getelementptr inbounds %LSlice, ptr %t538, i32 0, i32 2 + %t541 = getelementptr inbounds %LSlice, ptr %t538, i32 0, i32 0 + %t542 = load i32, ptr %t539 + %t543 = load i32, ptr %t540 + %t544 = icmp sge i32 %t542, %t543 + br i1 %t544, label %grow113, label %put114 grow113: - %t658 = mul i32 %t656, 2 - %t659 = icmp eq i32 %t656, 0 - %t660 = select i1 %t659, i32 8, i32 %t658 - %t661 = getelementptr ptr, ptr null, i32 1 - %t662 = ptrtoint ptr %t661 to i64 - %t663 = zext i32 %t660 to i64 - %t664 = mul i64 %t663, %t662 - %t665 = load ptr, ptr %t654 - %t666 = call ptr @realloc(ptr %t665, i64 %t664) - store ptr %t666, ptr %t654 - store i32 %t660, ptr %t653 + %t545 = mul i32 %t543, 2 + %t546 = icmp eq i32 %t543, 0 + %t547 = select i1 %t546, i32 8, i32 %t545 + %t548 = getelementptr ptr, ptr null, i32 1 + %t549 = ptrtoint ptr %t548 to i64 + %t550 = zext i32 %t547 to i64 + %t551 = mul i64 %t550, %t549 + %t552 = load ptr, ptr %t541 + %t553 = call ptr @realloc(ptr %t552, i64 %t551) + store ptr %t553, ptr %t541 + store i32 %t547, ptr %t540 br label %put114 put114: - %t667 = load ptr, ptr %t654 - %t668 = getelementptr inbounds ptr, ptr %t667, i32 %t655 - store ptr @.str1236, ptr %t668 - %t669 = add i32 %t655, 1 - store i32 %t669, ptr %t652 - %t670 = load ptr, ptr %t10 - %t671 = getelementptr inbounds %LSlice, ptr %t670, i32 0, i32 1 - %t672 = getelementptr inbounds %LSlice, ptr %t670, i32 0, i32 2 - %t673 = getelementptr inbounds %LSlice, ptr %t670, i32 0, i32 0 - %t674 = load i32, ptr %t671 - %t675 = load i32, ptr %t672 - %t676 = icmp sge i32 %t674, %t675 - br i1 %t676, label %grow115, label %put116 + %t554 = load ptr, ptr %t541 + %t555 = getelementptr inbounds ptr, ptr %t554, i32 %t542 + store ptr @.str2901, ptr %t555 + %t556 = add i32 %t542, 1 + store i32 %t556, ptr %t539 + %t557 = load ptr, ptr %t98 + %t558 = getelementptr inbounds %LSlice, ptr %t557, i32 0, i32 1 + %t559 = getelementptr inbounds %LSlice, ptr %t557, i32 0, i32 2 + %t560 = getelementptr inbounds %LSlice, ptr %t557, i32 0, i32 0 + %t561 = load i32, ptr %t558 + %t562 = load i32, ptr %t559 + %t563 = icmp sge i32 %t561, %t562 + br i1 %t563, label %grow115, label %put116 grow115: - %t677 = mul i32 %t675, 2 - %t678 = icmp eq i32 %t675, 0 - %t679 = select i1 %t678, i32 8, i32 %t677 - %t680 = getelementptr ptr, ptr null, i32 1 - %t681 = ptrtoint ptr %t680 to i64 - %t682 = zext i32 %t679 to i64 - %t683 = mul i64 %t682, %t681 - %t684 = load ptr, ptr %t673 - %t685 = call ptr @realloc(ptr %t684, i64 %t683) - store ptr %t685, ptr %t673 - store i32 %t679, ptr %t672 + %t564 = mul i32 %t562, 2 + %t565 = icmp eq i32 %t562, 0 + %t566 = select i1 %t565, i32 8, i32 %t564 + %t567 = getelementptr ptr, ptr null, i32 1 + %t568 = ptrtoint ptr %t567 to i64 + %t569 = zext i32 %t566 to i64 + %t570 = mul i64 %t569, %t568 + %t571 = load ptr, ptr %t560 + %t572 = call ptr @realloc(ptr %t571, i64 %t570) + store ptr %t572, ptr %t560 + store i32 %t566, ptr %t559 br label %put116 put116: - %t686 = load ptr, ptr %t673 - %t687 = getelementptr inbounds ptr, ptr %t686, i32 %t674 - store ptr @.str1237, ptr %t687 - %t688 = add i32 %t674, 1 - store i32 %t688, ptr %t671 - br label %ifend112 -ifend112: - %t689 = load ptr, ptr %t1 - %t690 = call i32 @fn_str_eq(ptr %t689, ptr @.str1238) - %t691 = icmp ne i32 %t690, 0 - br i1 %t691, label %then117, label %ifend119 + %t573 = load ptr, ptr %t560 + %t574 = getelementptr inbounds ptr, ptr %t573, i32 %t561 + store ptr @.str2902, ptr %t574 + %t575 = add i32 %t561, 1 + store i32 %t575, ptr %t558 + br label %ifend106 +ifend106: + %t576 = load ptr, ptr %t1 + %t577 = call i32 @fn_str_eq(ptr %t576, ptr @.str2903) + %t578 = icmp ne i32 %t577, 0 + br i1 %t578, label %then117, label %ifend119 then117: - store ptr @.str1239, ptr %t3 - %t692 = load ptr, ptr %t10 - %t693 = getelementptr inbounds %LSlice, ptr %t692, i32 0, i32 1 - %t694 = getelementptr inbounds %LSlice, ptr %t692, i32 0, i32 2 - %t695 = getelementptr inbounds %LSlice, ptr %t692, i32 0, i32 0 - %t696 = load i32, ptr %t693 - %t697 = load i32, ptr %t694 - %t698 = icmp sge i32 %t696, %t697 - br i1 %t698, label %grow120, label %put121 -grow120: - %t699 = mul i32 %t697, 2 - %t700 = icmp eq i32 %t697, 0 - %t701 = select i1 %t700, i32 8, i32 %t699 - %t702 = getelementptr ptr, ptr null, i32 1 - %t703 = ptrtoint ptr %t702 to i64 - %t704 = zext i32 %t701 to i64 - %t705 = mul i64 %t704, %t703 - %t706 = load ptr, ptr %t695 - %t707 = call ptr @realloc(ptr %t706, i64 %t705) - store ptr %t707, ptr %t695 - store i32 %t701, ptr %t694 - br label %put121 -put121: - %t708 = load ptr, ptr %t695 - %t709 = getelementptr inbounds ptr, ptr %t708, i32 %t696 - store ptr @.str1240, ptr %t709 - %t710 = add i32 %t696, 1 - store i32 %t710, ptr %t693 + store ptr @.str2904, ptr %t91 br label %ifend119 ifend119: - %t711 = load ptr, ptr %t1 - %t712 = call i32 @fn_str_eq(ptr %t711, ptr @.str1241) - %t713 = icmp ne i32 %t712, 0 - br i1 %t713, label %then122, label %ifend124 -then122: - store ptr @.str1242, ptr %t3 - %t714 = load ptr, ptr %t10 - %t715 = getelementptr inbounds %LSlice, ptr %t714, i32 0, i32 1 - %t716 = getelementptr inbounds %LSlice, ptr %t714, i32 0, i32 2 - %t717 = getelementptr inbounds %LSlice, ptr %t714, i32 0, i32 0 - %t718 = load i32, ptr %t715 - %t719 = load i32, ptr %t716 - %t720 = icmp sge i32 %t718, %t719 - br i1 %t720, label %grow125, label %put126 -grow125: - %t721 = mul i32 %t719, 2 - %t722 = icmp eq i32 %t719, 0 - %t723 = select i1 %t722, i32 8, i32 %t721 - %t724 = getelementptr ptr, ptr null, i32 1 - %t725 = ptrtoint ptr %t724 to i64 - %t726 = zext i32 %t723 to i64 - %t727 = mul i64 %t726, %t725 - %t728 = load ptr, ptr %t717 - %t729 = call ptr @realloc(ptr %t728, i64 %t727) - store ptr %t729, ptr %t717 - store i32 %t723, ptr %t716 - br label %put126 -put126: - %t730 = load ptr, ptr %t717 - %t731 = getelementptr inbounds ptr, ptr %t730, i32 %t718 - store ptr @.str1243, ptr %t731 - %t732 = add i32 %t718, 1 - store i32 %t732, ptr %t715 - br label %ifend124 -ifend124: - br label %ifend109 -ifend109: - %t733 = load ptr, ptr %t0 - %t734 = call i32 @fn_str_eq(ptr %t733, ptr @.str1244) - %t735 = icmp ne i32 %t734, 0 - br i1 %t735, label %then127, label %ifend129 -then127: - %t736 = load ptr, ptr %t1 - %t737 = call i32 @fn_str_eq(ptr %t736, ptr @.str1245) - %t738 = icmp ne i32 %t737, 0 - br i1 %t738, label %then130, label %ifend132 -then130: - store ptr @.str1246, ptr %t3 - br label %ifend132 -ifend132: - br label %ifend129 -ifend129: - %t739 = load ptr, ptr %t3 - %t740 = icmp eq ptr %t739, null - %t741 = zext i1 %t740 to i32 - %t742 = icmp ne i32 %t741, 0 - br i1 %t742, label %then133, label %ifend135 -then133: - %t743 = load ptr, ptr %t0 - %t744 = call ptr @fn_str_concat(ptr @.str1247, ptr %t743) - %t745 = call ptr @fn_str_concat(ptr %t744, ptr @.str1248) - %t746 = load ptr, ptr %t1 - %t747 = call ptr @fn_str_concat(ptr %t745, ptr %t746) - call void @fn_perr(ptr %t747) - br label %ifend135 -ifend135: - %t748 = load ptr, ptr %t2 - %t749 = load ptr, ptr %t10 - call void @fn_reorder_named(ptr %t748, ptr %t749) - %t750 = call ptr @fn_node(i32 33) - store ptr %t750, ptr %t751 - %t752 = load ptr, ptr %t751 - %t753 = getelementptr inbounds %Cmp_Node, ptr %t752, i32 0, i32 1 - %t754 = load ptr, ptr %t3 - store ptr %t754, ptr %t753 - %t755 = load ptr, ptr %t2 - %t756 = getelementptr inbounds %Cmp_Node, ptr %t755, i32 0, i32 4 - %t757 = load ptr, ptr %t751 - store ptr %t757, ptr %t756 - %t758 = load ptr, ptr %t2 - %t759 = call ptr @fn_emit_call(ptr %t758) - store ptr %t759, ptr %retval + %t579 = load ptr, ptr %t1 + %t580 = call i32 @fn_str_eq(ptr %t579, ptr @.str2905) + %t581 = icmp ne i32 %t580, 0 + br i1 %t581, label %then120, label %ifend122 +then120: + store ptr @.str2906, ptr %t91 + br label %ifend122 +ifend122: + %t582 = load ptr, ptr %t1 + %t583 = call i32 @fn_str_eq(ptr %t582, ptr @.str2907) + %t584 = icmp ne i32 %t583, 0 + br i1 %t584, label %then123, label %ifend125 +then123: + store ptr @.str2908, ptr %t91 + br label %ifend125 +ifend125: + %t585 = load ptr, ptr %t1 + %t586 = call i32 @fn_str_eq(ptr %t585, ptr @.str2909) + %t587 = icmp ne i32 %t586, 0 + br i1 %t587, label %then126, label %ifend128 +then126: + store ptr @.str2910, ptr %t91 + %t588 = load ptr, ptr %t98 + %t589 = getelementptr inbounds %LSlice, ptr %t588, i32 0, i32 1 + %t590 = getelementptr inbounds %LSlice, ptr %t588, i32 0, i32 2 + %t591 = getelementptr inbounds %LSlice, ptr %t588, i32 0, i32 0 + %t592 = load i32, ptr %t589 + %t593 = load i32, ptr %t590 + %t594 = icmp sge i32 %t592, %t593 + br i1 %t594, label %grow129, label %put130 +grow129: + %t595 = mul i32 %t593, 2 + %t596 = icmp eq i32 %t593, 0 + %t597 = select i1 %t596, i32 8, i32 %t595 + %t598 = getelementptr ptr, ptr null, i32 1 + %t599 = ptrtoint ptr %t598 to i64 + %t600 = zext i32 %t597 to i64 + %t601 = mul i64 %t600, %t599 + %t602 = load ptr, ptr %t591 + %t603 = call ptr @realloc(ptr %t602, i64 %t601) + store ptr %t603, ptr %t591 + store i32 %t597, ptr %t590 + br label %put130 +put130: + %t604 = load ptr, ptr %t591 + %t605 = getelementptr inbounds ptr, ptr %t604, i32 %t592 + store ptr @.str2911, ptr %t605 + %t606 = add i32 %t592, 1 + store i32 %t606, ptr %t589 + br label %ifend128 +ifend128: + %t607 = load ptr, ptr %t1 + %t608 = call i32 @fn_str_eq(ptr %t607, ptr @.str2912) + %t609 = icmp ne i32 %t608, 0 + br i1 %t609, label %then131, label %ifend133 +then131: + store ptr @.str2913, ptr %t91 + %t610 = load ptr, ptr %t98 + %t611 = getelementptr inbounds %LSlice, ptr %t610, i32 0, i32 1 + %t612 = getelementptr inbounds %LSlice, ptr %t610, i32 0, i32 2 + %t613 = getelementptr inbounds %LSlice, ptr %t610, i32 0, i32 0 + %t614 = load i32, ptr %t611 + %t615 = load i32, ptr %t612 + %t616 = icmp sge i32 %t614, %t615 + br i1 %t616, label %grow134, label %put135 +grow134: + %t617 = mul i32 %t615, 2 + %t618 = icmp eq i32 %t615, 0 + %t619 = select i1 %t618, i32 8, i32 %t617 + %t620 = getelementptr ptr, ptr null, i32 1 + %t621 = ptrtoint ptr %t620 to i64 + %t622 = zext i32 %t619 to i64 + %t623 = mul i64 %t622, %t621 + %t624 = load ptr, ptr %t613 + %t625 = call ptr @realloc(ptr %t624, i64 %t623) + store ptr %t625, ptr %t613 + store i32 %t619, ptr %t612 + br label %put135 +put135: + %t626 = load ptr, ptr %t613 + %t627 = getelementptr inbounds ptr, ptr %t626, i32 %t614 + store ptr @.str2914, ptr %t627 + %t628 = add i32 %t614, 1 + store i32 %t628, ptr %t611 + %t629 = load ptr, ptr %t98 + %t630 = getelementptr inbounds %LSlice, ptr %t629, i32 0, i32 1 + %t631 = getelementptr inbounds %LSlice, ptr %t629, i32 0, i32 2 + %t632 = getelementptr inbounds %LSlice, ptr %t629, i32 0, i32 0 + %t633 = load i32, ptr %t630 + %t634 = load i32, ptr %t631 + %t635 = icmp sge i32 %t633, %t634 + br i1 %t635, label %grow136, label %put137 +grow136: + %t636 = mul i32 %t634, 2 + %t637 = icmp eq i32 %t634, 0 + %t638 = select i1 %t637, i32 8, i32 %t636 + %t639 = getelementptr ptr, ptr null, i32 1 + %t640 = ptrtoint ptr %t639 to i64 + %t641 = zext i32 %t638 to i64 + %t642 = mul i64 %t641, %t640 + %t643 = load ptr, ptr %t632 + %t644 = call ptr @realloc(ptr %t643, i64 %t642) + store ptr %t644, ptr %t632 + store i32 %t638, ptr %t631 + br label %put137 +put137: + %t645 = load ptr, ptr %t632 + %t646 = getelementptr inbounds ptr, ptr %t645, i32 %t633 + store ptr @.str2915, ptr %t646 + %t647 = add i32 %t633, 1 + store i32 %t647, ptr %t630 + %t648 = load ptr, ptr %t98 + %t649 = getelementptr inbounds %LSlice, ptr %t648, i32 0, i32 1 + %t650 = getelementptr inbounds %LSlice, ptr %t648, i32 0, i32 2 + %t651 = getelementptr inbounds %LSlice, ptr %t648, i32 0, i32 0 + %t652 = load i32, ptr %t649 + %t653 = load i32, ptr %t650 + %t654 = icmp sge i32 %t652, %t653 + br i1 %t654, label %grow138, label %put139 +grow138: + %t655 = mul i32 %t653, 2 + %t656 = icmp eq i32 %t653, 0 + %t657 = select i1 %t656, i32 8, i32 %t655 + %t658 = getelementptr ptr, ptr null, i32 1 + %t659 = ptrtoint ptr %t658 to i64 + %t660 = zext i32 %t657 to i64 + %t661 = mul i64 %t660, %t659 + %t662 = load ptr, ptr %t651 + %t663 = call ptr @realloc(ptr %t662, i64 %t661) + store ptr %t663, ptr %t651 + store i32 %t657, ptr %t650 + br label %put139 +put139: + %t664 = load ptr, ptr %t651 + %t665 = getelementptr inbounds ptr, ptr %t664, i32 %t652 + store ptr @.str2916, ptr %t665 + %t666 = add i32 %t652, 1 + store i32 %t666, ptr %t649 + %t667 = load ptr, ptr %t98 + %t668 = getelementptr inbounds %LSlice, ptr %t667, i32 0, i32 1 + %t669 = getelementptr inbounds %LSlice, ptr %t667, i32 0, i32 2 + %t670 = getelementptr inbounds %LSlice, ptr %t667, i32 0, i32 0 + %t671 = load i32, ptr %t668 + %t672 = load i32, ptr %t669 + %t673 = icmp sge i32 %t671, %t672 + br i1 %t673, label %grow140, label %put141 +grow140: + %t674 = mul i32 %t672, 2 + %t675 = icmp eq i32 %t672, 0 + %t676 = select i1 %t675, i32 8, i32 %t674 + %t677 = getelementptr ptr, ptr null, i32 1 + %t678 = ptrtoint ptr %t677 to i64 + %t679 = zext i32 %t676 to i64 + %t680 = mul i64 %t679, %t678 + %t681 = load ptr, ptr %t670 + %t682 = call ptr @realloc(ptr %t681, i64 %t680) + store ptr %t682, ptr %t670 + store i32 %t676, ptr %t669 + br label %put141 +put141: + %t683 = load ptr, ptr %t670 + %t684 = getelementptr inbounds ptr, ptr %t683, i32 %t671 + store ptr @.str2917, ptr %t684 + %t685 = add i32 %t671, 1 + store i32 %t685, ptr %t668 + %t686 = load ptr, ptr %t98 + %t687 = getelementptr inbounds %LSlice, ptr %t686, i32 0, i32 1 + %t688 = getelementptr inbounds %LSlice, ptr %t686, i32 0, i32 2 + %t689 = getelementptr inbounds %LSlice, ptr %t686, i32 0, i32 0 + %t690 = load i32, ptr %t687 + %t691 = load i32, ptr %t688 + %t692 = icmp sge i32 %t690, %t691 + br i1 %t692, label %grow142, label %put143 +grow142: + %t693 = mul i32 %t691, 2 + %t694 = icmp eq i32 %t691, 0 + %t695 = select i1 %t694, i32 8, i32 %t693 + %t696 = getelementptr ptr, ptr null, i32 1 + %t697 = ptrtoint ptr %t696 to i64 + %t698 = zext i32 %t695 to i64 + %t699 = mul i64 %t698, %t697 + %t700 = load ptr, ptr %t689 + %t701 = call ptr @realloc(ptr %t700, i64 %t699) + store ptr %t701, ptr %t689 + store i32 %t695, ptr %t688 + br label %put143 +put143: + %t702 = load ptr, ptr %t689 + %t703 = getelementptr inbounds ptr, ptr %t702, i32 %t690 + store ptr @.str2918, ptr %t703 + %t704 = add i32 %t690, 1 + store i32 %t704, ptr %t687 + br label %ifend133 +ifend133: + %t705 = load ptr, ptr %t1 + %t706 = call i32 @fn_str_eq(ptr %t705, ptr @.str2919) + %t707 = icmp ne i32 %t706, 0 + br i1 %t707, label %then144, label %ifend146 +then144: + store ptr @.str2920, ptr %t91 + %t708 = load ptr, ptr %t98 + %t709 = getelementptr inbounds %LSlice, ptr %t708, i32 0, i32 1 + %t710 = getelementptr inbounds %LSlice, ptr %t708, i32 0, i32 2 + %t711 = getelementptr inbounds %LSlice, ptr %t708, i32 0, i32 0 + %t712 = load i32, ptr %t709 + %t713 = load i32, ptr %t710 + %t714 = icmp sge i32 %t712, %t713 + br i1 %t714, label %grow147, label %put148 +grow147: + %t715 = mul i32 %t713, 2 + %t716 = icmp eq i32 %t713, 0 + %t717 = select i1 %t716, i32 8, i32 %t715 + %t718 = getelementptr ptr, ptr null, i32 1 + %t719 = ptrtoint ptr %t718 to i64 + %t720 = zext i32 %t717 to i64 + %t721 = mul i64 %t720, %t719 + %t722 = load ptr, ptr %t711 + %t723 = call ptr @realloc(ptr %t722, i64 %t721) + store ptr %t723, ptr %t711 + store i32 %t717, ptr %t710 + br label %put148 +put148: + %t724 = load ptr, ptr %t711 + %t725 = getelementptr inbounds ptr, ptr %t724, i32 %t712 + store ptr @.str2921, ptr %t725 + %t726 = add i32 %t712, 1 + store i32 %t726, ptr %t709 + %t727 = load ptr, ptr %t98 + %t728 = getelementptr inbounds %LSlice, ptr %t727, i32 0, i32 1 + %t729 = getelementptr inbounds %LSlice, ptr %t727, i32 0, i32 2 + %t730 = getelementptr inbounds %LSlice, ptr %t727, i32 0, i32 0 + %t731 = load i32, ptr %t728 + %t732 = load i32, ptr %t729 + %t733 = icmp sge i32 %t731, %t732 + br i1 %t733, label %grow149, label %put150 +grow149: + %t734 = mul i32 %t732, 2 + %t735 = icmp eq i32 %t732, 0 + %t736 = select i1 %t735, i32 8, i32 %t734 + %t737 = getelementptr ptr, ptr null, i32 1 + %t738 = ptrtoint ptr %t737 to i64 + %t739 = zext i32 %t736 to i64 + %t740 = mul i64 %t739, %t738 + %t741 = load ptr, ptr %t730 + %t742 = call ptr @realloc(ptr %t741, i64 %t740) + store ptr %t742, ptr %t730 + store i32 %t736, ptr %t729 + br label %put150 +put150: + %t743 = load ptr, ptr %t730 + %t744 = getelementptr inbounds ptr, ptr %t743, i32 %t731 + store ptr @.str2922, ptr %t744 + %t745 = add i32 %t731, 1 + store i32 %t745, ptr %t728 + %t746 = load ptr, ptr %t98 + %t747 = getelementptr inbounds %LSlice, ptr %t746, i32 0, i32 1 + %t748 = getelementptr inbounds %LSlice, ptr %t746, i32 0, i32 2 + %t749 = getelementptr inbounds %LSlice, ptr %t746, i32 0, i32 0 + %t750 = load i32, ptr %t747 + %t751 = load i32, ptr %t748 + %t752 = icmp sge i32 %t750, %t751 + br i1 %t752, label %grow151, label %put152 +grow151: + %t753 = mul i32 %t751, 2 + %t754 = icmp eq i32 %t751, 0 + %t755 = select i1 %t754, i32 8, i32 %t753 + %t756 = getelementptr ptr, ptr null, i32 1 + %t757 = ptrtoint ptr %t756 to i64 + %t758 = zext i32 %t755 to i64 + %t759 = mul i64 %t758, %t757 + %t760 = load ptr, ptr %t749 + %t761 = call ptr @realloc(ptr %t760, i64 %t759) + store ptr %t761, ptr %t749 + store i32 %t755, ptr %t748 + br label %put152 +put152: + %t762 = load ptr, ptr %t749 + %t763 = getelementptr inbounds ptr, ptr %t762, i32 %t750 + store ptr @.str2923, ptr %t763 + %t764 = add i32 %t750, 1 + store i32 %t764, ptr %t747 + %t765 = load ptr, ptr %t98 + %t766 = getelementptr inbounds %LSlice, ptr %t765, i32 0, i32 1 + %t767 = getelementptr inbounds %LSlice, ptr %t765, i32 0, i32 2 + %t768 = getelementptr inbounds %LSlice, ptr %t765, i32 0, i32 0 + %t769 = load i32, ptr %t766 + %t770 = load i32, ptr %t767 + %t771 = icmp sge i32 %t769, %t770 + br i1 %t771, label %grow153, label %put154 +grow153: + %t772 = mul i32 %t770, 2 + %t773 = icmp eq i32 %t770, 0 + %t774 = select i1 %t773, i32 8, i32 %t772 + %t775 = getelementptr ptr, ptr null, i32 1 + %t776 = ptrtoint ptr %t775 to i64 + %t777 = zext i32 %t774 to i64 + %t778 = mul i64 %t777, %t776 + %t779 = load ptr, ptr %t768 + %t780 = call ptr @realloc(ptr %t779, i64 %t778) + store ptr %t780, ptr %t768 + store i32 %t774, ptr %t767 + br label %put154 +put154: + %t781 = load ptr, ptr %t768 + %t782 = getelementptr inbounds ptr, ptr %t781, i32 %t769 + store ptr @.str2924, ptr %t782 + %t783 = add i32 %t769, 1 + store i32 %t783, ptr %t766 + br label %ifend146 +ifend146: + %t784 = load ptr, ptr %t1 + %t785 = call i32 @fn_str_eq(ptr %t784, ptr @.str2925) + %t786 = icmp ne i32 %t785, 0 + br i1 %t786, label %then155, label %ifend157 +then155: + store ptr @.str2926, ptr %t91 + %t787 = load ptr, ptr %t98 + %t788 = getelementptr inbounds %LSlice, ptr %t787, i32 0, i32 1 + %t789 = getelementptr inbounds %LSlice, ptr %t787, i32 0, i32 2 + %t790 = getelementptr inbounds %LSlice, ptr %t787, i32 0, i32 0 + %t791 = load i32, ptr %t788 + %t792 = load i32, ptr %t789 + %t793 = icmp sge i32 %t791, %t792 + br i1 %t793, label %grow158, label %put159 +grow158: + %t794 = mul i32 %t792, 2 + %t795 = icmp eq i32 %t792, 0 + %t796 = select i1 %t795, i32 8, i32 %t794 + %t797 = getelementptr ptr, ptr null, i32 1 + %t798 = ptrtoint ptr %t797 to i64 + %t799 = zext i32 %t796 to i64 + %t800 = mul i64 %t799, %t798 + %t801 = load ptr, ptr %t790 + %t802 = call ptr @realloc(ptr %t801, i64 %t800) + store ptr %t802, ptr %t790 + store i32 %t796, ptr %t789 + br label %put159 +put159: + %t803 = load ptr, ptr %t790 + %t804 = getelementptr inbounds ptr, ptr %t803, i32 %t791 + store ptr @.str2927, ptr %t804 + %t805 = add i32 %t791, 1 + store i32 %t805, ptr %t788 + %t806 = load ptr, ptr %t98 + %t807 = getelementptr inbounds %LSlice, ptr %t806, i32 0, i32 1 + %t808 = getelementptr inbounds %LSlice, ptr %t806, i32 0, i32 2 + %t809 = getelementptr inbounds %LSlice, ptr %t806, i32 0, i32 0 + %t810 = load i32, ptr %t807 + %t811 = load i32, ptr %t808 + %t812 = icmp sge i32 %t810, %t811 + br i1 %t812, label %grow160, label %put161 +grow160: + %t813 = mul i32 %t811, 2 + %t814 = icmp eq i32 %t811, 0 + %t815 = select i1 %t814, i32 8, i32 %t813 + %t816 = getelementptr ptr, ptr null, i32 1 + %t817 = ptrtoint ptr %t816 to i64 + %t818 = zext i32 %t815 to i64 + %t819 = mul i64 %t818, %t817 + %t820 = load ptr, ptr %t809 + %t821 = call ptr @realloc(ptr %t820, i64 %t819) + store ptr %t821, ptr %t809 + store i32 %t815, ptr %t808 + br label %put161 +put161: + %t822 = load ptr, ptr %t809 + %t823 = getelementptr inbounds ptr, ptr %t822, i32 %t810 + store ptr @.str2928, ptr %t823 + %t824 = add i32 %t810, 1 + store i32 %t824, ptr %t807 + %t825 = load ptr, ptr %t98 + %t826 = getelementptr inbounds %LSlice, ptr %t825, i32 0, i32 1 + %t827 = getelementptr inbounds %LSlice, ptr %t825, i32 0, i32 2 + %t828 = getelementptr inbounds %LSlice, ptr %t825, i32 0, i32 0 + %t829 = load i32, ptr %t826 + %t830 = load i32, ptr %t827 + %t831 = icmp sge i32 %t829, %t830 + br i1 %t831, label %grow162, label %put163 +grow162: + %t832 = mul i32 %t830, 2 + %t833 = icmp eq i32 %t830, 0 + %t834 = select i1 %t833, i32 8, i32 %t832 + %t835 = getelementptr ptr, ptr null, i32 1 + %t836 = ptrtoint ptr %t835 to i64 + %t837 = zext i32 %t834 to i64 + %t838 = mul i64 %t837, %t836 + %t839 = load ptr, ptr %t828 + %t840 = call ptr @realloc(ptr %t839, i64 %t838) + store ptr %t840, ptr %t828 + store i32 %t834, ptr %t827 + br label %put163 +put163: + %t841 = load ptr, ptr %t828 + %t842 = getelementptr inbounds ptr, ptr %t841, i32 %t829 + store ptr @.str2929, ptr %t842 + %t843 = add i32 %t829, 1 + store i32 %t843, ptr %t826 + %t844 = load ptr, ptr %t98 + %t845 = getelementptr inbounds %LSlice, ptr %t844, i32 0, i32 1 + %t846 = getelementptr inbounds %LSlice, ptr %t844, i32 0, i32 2 + %t847 = getelementptr inbounds %LSlice, ptr %t844, i32 0, i32 0 + %t848 = load i32, ptr %t845 + %t849 = load i32, ptr %t846 + %t850 = icmp sge i32 %t848, %t849 + br i1 %t850, label %grow164, label %put165 +grow164: + %t851 = mul i32 %t849, 2 + %t852 = icmp eq i32 %t849, 0 + %t853 = select i1 %t852, i32 8, i32 %t851 + %t854 = getelementptr ptr, ptr null, i32 1 + %t855 = ptrtoint ptr %t854 to i64 + %t856 = zext i32 %t853 to i64 + %t857 = mul i64 %t856, %t855 + %t858 = load ptr, ptr %t847 + %t859 = call ptr @realloc(ptr %t858, i64 %t857) + store ptr %t859, ptr %t847 + store i32 %t853, ptr %t846 + br label %put165 +put165: + %t860 = load ptr, ptr %t847 + %t861 = getelementptr inbounds ptr, ptr %t860, i32 %t848 + store ptr @.str2930, ptr %t861 + %t862 = add i32 %t848, 1 + store i32 %t862, ptr %t845 + br label %ifend157 +ifend157: + %t863 = load ptr, ptr %t1 + %t864 = call i32 @fn_str_eq(ptr %t863, ptr @.str2931) + %t865 = icmp ne i32 %t864, 0 + br i1 %t865, label %then166, label %ifend168 +then166: + store ptr @.str2932, ptr %t91 + %t866 = load ptr, ptr %t98 + %t867 = getelementptr inbounds %LSlice, ptr %t866, i32 0, i32 1 + %t868 = getelementptr inbounds %LSlice, ptr %t866, i32 0, i32 2 + %t869 = getelementptr inbounds %LSlice, ptr %t866, i32 0, i32 0 + %t870 = load i32, ptr %t867 + %t871 = load i32, ptr %t868 + %t872 = icmp sge i32 %t870, %t871 + br i1 %t872, label %grow169, label %put170 +grow169: + %t873 = mul i32 %t871, 2 + %t874 = icmp eq i32 %t871, 0 + %t875 = select i1 %t874, i32 8, i32 %t873 + %t876 = getelementptr ptr, ptr null, i32 1 + %t877 = ptrtoint ptr %t876 to i64 + %t878 = zext i32 %t875 to i64 + %t879 = mul i64 %t878, %t877 + %t880 = load ptr, ptr %t869 + %t881 = call ptr @realloc(ptr %t880, i64 %t879) + store ptr %t881, ptr %t869 + store i32 %t875, ptr %t868 + br label %put170 +put170: + %t882 = load ptr, ptr %t869 + %t883 = getelementptr inbounds ptr, ptr %t882, i32 %t870 + store ptr @.str2933, ptr %t883 + %t884 = add i32 %t870, 1 + store i32 %t884, ptr %t867 + %t885 = load ptr, ptr %t98 + %t886 = getelementptr inbounds %LSlice, ptr %t885, i32 0, i32 1 + %t887 = getelementptr inbounds %LSlice, ptr %t885, i32 0, i32 2 + %t888 = getelementptr inbounds %LSlice, ptr %t885, i32 0, i32 0 + %t889 = load i32, ptr %t886 + %t890 = load i32, ptr %t887 + %t891 = icmp sge i32 %t889, %t890 + br i1 %t891, label %grow171, label %put172 +grow171: + %t892 = mul i32 %t890, 2 + %t893 = icmp eq i32 %t890, 0 + %t894 = select i1 %t893, i32 8, i32 %t892 + %t895 = getelementptr ptr, ptr null, i32 1 + %t896 = ptrtoint ptr %t895 to i64 + %t897 = zext i32 %t894 to i64 + %t898 = mul i64 %t897, %t896 + %t899 = load ptr, ptr %t888 + %t900 = call ptr @realloc(ptr %t899, i64 %t898) + store ptr %t900, ptr %t888 + store i32 %t894, ptr %t887 + br label %put172 +put172: + %t901 = load ptr, ptr %t888 + %t902 = getelementptr inbounds ptr, ptr %t901, i32 %t889 + store ptr @.str2934, ptr %t902 + %t903 = add i32 %t889, 1 + store i32 %t903, ptr %t886 + %t904 = load ptr, ptr %t98 + %t905 = getelementptr inbounds %LSlice, ptr %t904, i32 0, i32 1 + %t906 = getelementptr inbounds %LSlice, ptr %t904, i32 0, i32 2 + %t907 = getelementptr inbounds %LSlice, ptr %t904, i32 0, i32 0 + %t908 = load i32, ptr %t905 + %t909 = load i32, ptr %t906 + %t910 = icmp sge i32 %t908, %t909 + br i1 %t910, label %grow173, label %put174 +grow173: + %t911 = mul i32 %t909, 2 + %t912 = icmp eq i32 %t909, 0 + %t913 = select i1 %t912, i32 8, i32 %t911 + %t914 = getelementptr ptr, ptr null, i32 1 + %t915 = ptrtoint ptr %t914 to i64 + %t916 = zext i32 %t913 to i64 + %t917 = mul i64 %t916, %t915 + %t918 = load ptr, ptr %t907 + %t919 = call ptr @realloc(ptr %t918, i64 %t917) + store ptr %t919, ptr %t907 + store i32 %t913, ptr %t906 + br label %put174 +put174: + %t920 = load ptr, ptr %t907 + %t921 = getelementptr inbounds ptr, ptr %t920, i32 %t908 + store ptr @.str2935, ptr %t921 + %t922 = add i32 %t908, 1 + store i32 %t922, ptr %t905 + %t923 = load ptr, ptr %t98 + %t924 = getelementptr inbounds %LSlice, ptr %t923, i32 0, i32 1 + %t925 = getelementptr inbounds %LSlice, ptr %t923, i32 0, i32 2 + %t926 = getelementptr inbounds %LSlice, ptr %t923, i32 0, i32 0 + %t927 = load i32, ptr %t924 + %t928 = load i32, ptr %t925 + %t929 = icmp sge i32 %t927, %t928 + br i1 %t929, label %grow175, label %put176 +grow175: + %t930 = mul i32 %t928, 2 + %t931 = icmp eq i32 %t928, 0 + %t932 = select i1 %t931, i32 8, i32 %t930 + %t933 = getelementptr ptr, ptr null, i32 1 + %t934 = ptrtoint ptr %t933 to i64 + %t935 = zext i32 %t932 to i64 + %t936 = mul i64 %t935, %t934 + %t937 = load ptr, ptr %t926 + %t938 = call ptr @realloc(ptr %t937, i64 %t936) + store ptr %t938, ptr %t926 + store i32 %t932, ptr %t925 + br label %put176 +put176: + %t939 = load ptr, ptr %t926 + %t940 = getelementptr inbounds ptr, ptr %t939, i32 %t927 + store ptr @.str2936, ptr %t940 + %t941 = add i32 %t927, 1 + store i32 %t941, ptr %t924 + %t942 = load ptr, ptr %t98 + %t943 = getelementptr inbounds %LSlice, ptr %t942, i32 0, i32 1 + %t944 = getelementptr inbounds %LSlice, ptr %t942, i32 0, i32 2 + %t945 = getelementptr inbounds %LSlice, ptr %t942, i32 0, i32 0 + %t946 = load i32, ptr %t943 + %t947 = load i32, ptr %t944 + %t948 = icmp sge i32 %t946, %t947 + br i1 %t948, label %grow177, label %put178 +grow177: + %t949 = mul i32 %t947, 2 + %t950 = icmp eq i32 %t947, 0 + %t951 = select i1 %t950, i32 8, i32 %t949 + %t952 = getelementptr ptr, ptr null, i32 1 + %t953 = ptrtoint ptr %t952 to i64 + %t954 = zext i32 %t951 to i64 + %t955 = mul i64 %t954, %t953 + %t956 = load ptr, ptr %t945 + %t957 = call ptr @realloc(ptr %t956, i64 %t955) + store ptr %t957, ptr %t945 + store i32 %t951, ptr %t944 + br label %put178 +put178: + %t958 = load ptr, ptr %t945 + %t959 = getelementptr inbounds ptr, ptr %t958, i32 %t946 + store ptr @.str2937, ptr %t959 + %t960 = add i32 %t946, 1 + store i32 %t960, ptr %t943 + %t961 = load ptr, ptr %t98 + %t962 = getelementptr inbounds %LSlice, ptr %t961, i32 0, i32 1 + %t963 = getelementptr inbounds %LSlice, ptr %t961, i32 0, i32 2 + %t964 = getelementptr inbounds %LSlice, ptr %t961, i32 0, i32 0 + %t965 = load i32, ptr %t962 + %t966 = load i32, ptr %t963 + %t967 = icmp sge i32 %t965, %t966 + br i1 %t967, label %grow179, label %put180 +grow179: + %t968 = mul i32 %t966, 2 + %t969 = icmp eq i32 %t966, 0 + %t970 = select i1 %t969, i32 8, i32 %t968 + %t971 = getelementptr ptr, ptr null, i32 1 + %t972 = ptrtoint ptr %t971 to i64 + %t973 = zext i32 %t970 to i64 + %t974 = mul i64 %t973, %t972 + %t975 = load ptr, ptr %t964 + %t976 = call ptr @realloc(ptr %t975, i64 %t974) + store ptr %t976, ptr %t964 + store i32 %t970, ptr %t963 + br label %put180 +put180: + %t977 = load ptr, ptr %t964 + %t978 = getelementptr inbounds ptr, ptr %t977, i32 %t965 + store ptr @.str2938, ptr %t978 + %t979 = add i32 %t965, 1 + store i32 %t979, ptr %t962 + %t980 = load ptr, ptr %t98 + %t981 = getelementptr inbounds %LSlice, ptr %t980, i32 0, i32 1 + %t982 = getelementptr inbounds %LSlice, ptr %t980, i32 0, i32 2 + %t983 = getelementptr inbounds %LSlice, ptr %t980, i32 0, i32 0 + %t984 = load i32, ptr %t981 + %t985 = load i32, ptr %t982 + %t986 = icmp sge i32 %t984, %t985 + br i1 %t986, label %grow181, label %put182 +grow181: + %t987 = mul i32 %t985, 2 + %t988 = icmp eq i32 %t985, 0 + %t989 = select i1 %t988, i32 8, i32 %t987 + %t990 = getelementptr ptr, ptr null, i32 1 + %t991 = ptrtoint ptr %t990 to i64 + %t992 = zext i32 %t989 to i64 + %t993 = mul i64 %t992, %t991 + %t994 = load ptr, ptr %t983 + %t995 = call ptr @realloc(ptr %t994, i64 %t993) + store ptr %t995, ptr %t983 + store i32 %t989, ptr %t982 + br label %put182 +put182: + %t996 = load ptr, ptr %t983 + %t997 = getelementptr inbounds ptr, ptr %t996, i32 %t984 + store ptr @.str2939, ptr %t997 + %t998 = add i32 %t984, 1 + store i32 %t998, ptr %t981 + br label %ifend168 +ifend168: + %t999 = load ptr, ptr %t1 + %t1000 = call i32 @fn_str_eq(ptr %t999, ptr @.str2940) + %t1001 = icmp ne i32 %t1000, 0 + br i1 %t1001, label %then183, label %ifend185 +then183: + store ptr @.str2941, ptr %t91 + %t1002 = load ptr, ptr %t98 + %t1003 = getelementptr inbounds %LSlice, ptr %t1002, i32 0, i32 1 + %t1004 = getelementptr inbounds %LSlice, ptr %t1002, i32 0, i32 2 + %t1005 = getelementptr inbounds %LSlice, ptr %t1002, i32 0, i32 0 + %t1006 = load i32, ptr %t1003 + %t1007 = load i32, ptr %t1004 + %t1008 = icmp sge i32 %t1006, %t1007 + br i1 %t1008, label %grow186, label %put187 +grow186: + %t1009 = mul i32 %t1007, 2 + %t1010 = icmp eq i32 %t1007, 0 + %t1011 = select i1 %t1010, i32 8, i32 %t1009 + %t1012 = getelementptr ptr, ptr null, i32 1 + %t1013 = ptrtoint ptr %t1012 to i64 + %t1014 = zext i32 %t1011 to i64 + %t1015 = mul i64 %t1014, %t1013 + %t1016 = load ptr, ptr %t1005 + %t1017 = call ptr @realloc(ptr %t1016, i64 %t1015) + store ptr %t1017, ptr %t1005 + store i32 %t1011, ptr %t1004 + br label %put187 +put187: + %t1018 = load ptr, ptr %t1005 + %t1019 = getelementptr inbounds ptr, ptr %t1018, i32 %t1006 + store ptr @.str2942, ptr %t1019 + %t1020 = add i32 %t1006, 1 + store i32 %t1020, ptr %t1003 + %t1021 = load ptr, ptr %t98 + %t1022 = getelementptr inbounds %LSlice, ptr %t1021, i32 0, i32 1 + %t1023 = getelementptr inbounds %LSlice, ptr %t1021, i32 0, i32 2 + %t1024 = getelementptr inbounds %LSlice, ptr %t1021, i32 0, i32 0 + %t1025 = load i32, ptr %t1022 + %t1026 = load i32, ptr %t1023 + %t1027 = icmp sge i32 %t1025, %t1026 + br i1 %t1027, label %grow188, label %put189 +grow188: + %t1028 = mul i32 %t1026, 2 + %t1029 = icmp eq i32 %t1026, 0 + %t1030 = select i1 %t1029, i32 8, i32 %t1028 + %t1031 = getelementptr ptr, ptr null, i32 1 + %t1032 = ptrtoint ptr %t1031 to i64 + %t1033 = zext i32 %t1030 to i64 + %t1034 = mul i64 %t1033, %t1032 + %t1035 = load ptr, ptr %t1024 + %t1036 = call ptr @realloc(ptr %t1035, i64 %t1034) + store ptr %t1036, ptr %t1024 + store i32 %t1030, ptr %t1023 + br label %put189 +put189: + %t1037 = load ptr, ptr %t1024 + %t1038 = getelementptr inbounds ptr, ptr %t1037, i32 %t1025 + store ptr @.str2943, ptr %t1038 + %t1039 = add i32 %t1025, 1 + store i32 %t1039, ptr %t1022 + %t1040 = load ptr, ptr %t98 + %t1041 = getelementptr inbounds %LSlice, ptr %t1040, i32 0, i32 1 + %t1042 = getelementptr inbounds %LSlice, ptr %t1040, i32 0, i32 2 + %t1043 = getelementptr inbounds %LSlice, ptr %t1040, i32 0, i32 0 + %t1044 = load i32, ptr %t1041 + %t1045 = load i32, ptr %t1042 + %t1046 = icmp sge i32 %t1044, %t1045 + br i1 %t1046, label %grow190, label %put191 +grow190: + %t1047 = mul i32 %t1045, 2 + %t1048 = icmp eq i32 %t1045, 0 + %t1049 = select i1 %t1048, i32 8, i32 %t1047 + %t1050 = getelementptr ptr, ptr null, i32 1 + %t1051 = ptrtoint ptr %t1050 to i64 + %t1052 = zext i32 %t1049 to i64 + %t1053 = mul i64 %t1052, %t1051 + %t1054 = load ptr, ptr %t1043 + %t1055 = call ptr @realloc(ptr %t1054, i64 %t1053) + store ptr %t1055, ptr %t1043 + store i32 %t1049, ptr %t1042 + br label %put191 +put191: + %t1056 = load ptr, ptr %t1043 + %t1057 = getelementptr inbounds ptr, ptr %t1056, i32 %t1044 + store ptr @.str2944, ptr %t1057 + %t1058 = add i32 %t1044, 1 + store i32 %t1058, ptr %t1041 + %t1059 = load ptr, ptr %t98 + %t1060 = getelementptr inbounds %LSlice, ptr %t1059, i32 0, i32 1 + %t1061 = getelementptr inbounds %LSlice, ptr %t1059, i32 0, i32 2 + %t1062 = getelementptr inbounds %LSlice, ptr %t1059, i32 0, i32 0 + %t1063 = load i32, ptr %t1060 + %t1064 = load i32, ptr %t1061 + %t1065 = icmp sge i32 %t1063, %t1064 + br i1 %t1065, label %grow192, label %put193 +grow192: + %t1066 = mul i32 %t1064, 2 + %t1067 = icmp eq i32 %t1064, 0 + %t1068 = select i1 %t1067, i32 8, i32 %t1066 + %t1069 = getelementptr ptr, ptr null, i32 1 + %t1070 = ptrtoint ptr %t1069 to i64 + %t1071 = zext i32 %t1068 to i64 + %t1072 = mul i64 %t1071, %t1070 + %t1073 = load ptr, ptr %t1062 + %t1074 = call ptr @realloc(ptr %t1073, i64 %t1072) + store ptr %t1074, ptr %t1062 + store i32 %t1068, ptr %t1061 + br label %put193 +put193: + %t1075 = load ptr, ptr %t1062 + %t1076 = getelementptr inbounds ptr, ptr %t1075, i32 %t1063 + store ptr @.str2945, ptr %t1076 + %t1077 = add i32 %t1063, 1 + store i32 %t1077, ptr %t1060 + %t1078 = load ptr, ptr %t98 + %t1079 = getelementptr inbounds %LSlice, ptr %t1078, i32 0, i32 1 + %t1080 = getelementptr inbounds %LSlice, ptr %t1078, i32 0, i32 2 + %t1081 = getelementptr inbounds %LSlice, ptr %t1078, i32 0, i32 0 + %t1082 = load i32, ptr %t1079 + %t1083 = load i32, ptr %t1080 + %t1084 = icmp sge i32 %t1082, %t1083 + br i1 %t1084, label %grow194, label %put195 +grow194: + %t1085 = mul i32 %t1083, 2 + %t1086 = icmp eq i32 %t1083, 0 + %t1087 = select i1 %t1086, i32 8, i32 %t1085 + %t1088 = getelementptr ptr, ptr null, i32 1 + %t1089 = ptrtoint ptr %t1088 to i64 + %t1090 = zext i32 %t1087 to i64 + %t1091 = mul i64 %t1090, %t1089 + %t1092 = load ptr, ptr %t1081 + %t1093 = call ptr @realloc(ptr %t1092, i64 %t1091) + store ptr %t1093, ptr %t1081 + store i32 %t1087, ptr %t1080 + br label %put195 +put195: + %t1094 = load ptr, ptr %t1081 + %t1095 = getelementptr inbounds ptr, ptr %t1094, i32 %t1082 + store ptr @.str2946, ptr %t1095 + %t1096 = add i32 %t1082, 1 + store i32 %t1096, ptr %t1079 + %t1097 = load ptr, ptr %t98 + %t1098 = getelementptr inbounds %LSlice, ptr %t1097, i32 0, i32 1 + %t1099 = getelementptr inbounds %LSlice, ptr %t1097, i32 0, i32 2 + %t1100 = getelementptr inbounds %LSlice, ptr %t1097, i32 0, i32 0 + %t1101 = load i32, ptr %t1098 + %t1102 = load i32, ptr %t1099 + %t1103 = icmp sge i32 %t1101, %t1102 + br i1 %t1103, label %grow196, label %put197 +grow196: + %t1104 = mul i32 %t1102, 2 + %t1105 = icmp eq i32 %t1102, 0 + %t1106 = select i1 %t1105, i32 8, i32 %t1104 + %t1107 = getelementptr ptr, ptr null, i32 1 + %t1108 = ptrtoint ptr %t1107 to i64 + %t1109 = zext i32 %t1106 to i64 + %t1110 = mul i64 %t1109, %t1108 + %t1111 = load ptr, ptr %t1100 + %t1112 = call ptr @realloc(ptr %t1111, i64 %t1110) + store ptr %t1112, ptr %t1100 + store i32 %t1106, ptr %t1099 + br label %put197 +put197: + %t1113 = load ptr, ptr %t1100 + %t1114 = getelementptr inbounds ptr, ptr %t1113, i32 %t1101 + store ptr @.str2947, ptr %t1114 + %t1115 = add i32 %t1101, 1 + store i32 %t1115, ptr %t1098 + %t1116 = load ptr, ptr %t98 + %t1117 = getelementptr inbounds %LSlice, ptr %t1116, i32 0, i32 1 + %t1118 = getelementptr inbounds %LSlice, ptr %t1116, i32 0, i32 2 + %t1119 = getelementptr inbounds %LSlice, ptr %t1116, i32 0, i32 0 + %t1120 = load i32, ptr %t1117 + %t1121 = load i32, ptr %t1118 + %t1122 = icmp sge i32 %t1120, %t1121 + br i1 %t1122, label %grow198, label %put199 +grow198: + %t1123 = mul i32 %t1121, 2 + %t1124 = icmp eq i32 %t1121, 0 + %t1125 = select i1 %t1124, i32 8, i32 %t1123 + %t1126 = getelementptr ptr, ptr null, i32 1 + %t1127 = ptrtoint ptr %t1126 to i64 + %t1128 = zext i32 %t1125 to i64 + %t1129 = mul i64 %t1128, %t1127 + %t1130 = load ptr, ptr %t1119 + %t1131 = call ptr @realloc(ptr %t1130, i64 %t1129) + store ptr %t1131, ptr %t1119 + store i32 %t1125, ptr %t1118 + br label %put199 +put199: + %t1132 = load ptr, ptr %t1119 + %t1133 = getelementptr inbounds ptr, ptr %t1132, i32 %t1120 + store ptr @.str2948, ptr %t1133 + %t1134 = add i32 %t1120, 1 + store i32 %t1134, ptr %t1117 + br label %ifend185 +ifend185: + %t1135 = load ptr, ptr %t1 + %t1136 = call i32 @fn_str_eq(ptr %t1135, ptr @.str2949) + %t1137 = icmp ne i32 %t1136, 0 + br i1 %t1137, label %then200, label %ifend202 +then200: + store ptr @.str2950, ptr %t91 + %t1138 = load ptr, ptr %t98 + %t1139 = getelementptr inbounds %LSlice, ptr %t1138, i32 0, i32 1 + %t1140 = getelementptr inbounds %LSlice, ptr %t1138, i32 0, i32 2 + %t1141 = getelementptr inbounds %LSlice, ptr %t1138, i32 0, i32 0 + %t1142 = load i32, ptr %t1139 + %t1143 = load i32, ptr %t1140 + %t1144 = icmp sge i32 %t1142, %t1143 + br i1 %t1144, label %grow203, label %put204 +grow203: + %t1145 = mul i32 %t1143, 2 + %t1146 = icmp eq i32 %t1143, 0 + %t1147 = select i1 %t1146, i32 8, i32 %t1145 + %t1148 = getelementptr ptr, ptr null, i32 1 + %t1149 = ptrtoint ptr %t1148 to i64 + %t1150 = zext i32 %t1147 to i64 + %t1151 = mul i64 %t1150, %t1149 + %t1152 = load ptr, ptr %t1141 + %t1153 = call ptr @realloc(ptr %t1152, i64 %t1151) + store ptr %t1153, ptr %t1141 + store i32 %t1147, ptr %t1140 + br label %put204 +put204: + %t1154 = load ptr, ptr %t1141 + %t1155 = getelementptr inbounds ptr, ptr %t1154, i32 %t1142 + store ptr @.str2951, ptr %t1155 + %t1156 = add i32 %t1142, 1 + store i32 %t1156, ptr %t1139 + %t1157 = load ptr, ptr %t98 + %t1158 = getelementptr inbounds %LSlice, ptr %t1157, i32 0, i32 1 + %t1159 = getelementptr inbounds %LSlice, ptr %t1157, i32 0, i32 2 + %t1160 = getelementptr inbounds %LSlice, ptr %t1157, i32 0, i32 0 + %t1161 = load i32, ptr %t1158 + %t1162 = load i32, ptr %t1159 + %t1163 = icmp sge i32 %t1161, %t1162 + br i1 %t1163, label %grow205, label %put206 +grow205: + %t1164 = mul i32 %t1162, 2 + %t1165 = icmp eq i32 %t1162, 0 + %t1166 = select i1 %t1165, i32 8, i32 %t1164 + %t1167 = getelementptr ptr, ptr null, i32 1 + %t1168 = ptrtoint ptr %t1167 to i64 + %t1169 = zext i32 %t1166 to i64 + %t1170 = mul i64 %t1169, %t1168 + %t1171 = load ptr, ptr %t1160 + %t1172 = call ptr @realloc(ptr %t1171, i64 %t1170) + store ptr %t1172, ptr %t1160 + store i32 %t1166, ptr %t1159 + br label %put206 +put206: + %t1173 = load ptr, ptr %t1160 + %t1174 = getelementptr inbounds ptr, ptr %t1173, i32 %t1161 + store ptr @.str2952, ptr %t1174 + %t1175 = add i32 %t1161, 1 + store i32 %t1175, ptr %t1158 + %t1176 = load ptr, ptr %t98 + %t1177 = getelementptr inbounds %LSlice, ptr %t1176, i32 0, i32 1 + %t1178 = getelementptr inbounds %LSlice, ptr %t1176, i32 0, i32 2 + %t1179 = getelementptr inbounds %LSlice, ptr %t1176, i32 0, i32 0 + %t1180 = load i32, ptr %t1177 + %t1181 = load i32, ptr %t1178 + %t1182 = icmp sge i32 %t1180, %t1181 + br i1 %t1182, label %grow207, label %put208 +grow207: + %t1183 = mul i32 %t1181, 2 + %t1184 = icmp eq i32 %t1181, 0 + %t1185 = select i1 %t1184, i32 8, i32 %t1183 + %t1186 = getelementptr ptr, ptr null, i32 1 + %t1187 = ptrtoint ptr %t1186 to i64 + %t1188 = zext i32 %t1185 to i64 + %t1189 = mul i64 %t1188, %t1187 + %t1190 = load ptr, ptr %t1179 + %t1191 = call ptr @realloc(ptr %t1190, i64 %t1189) + store ptr %t1191, ptr %t1179 + store i32 %t1185, ptr %t1178 + br label %put208 +put208: + %t1192 = load ptr, ptr %t1179 + %t1193 = getelementptr inbounds ptr, ptr %t1192, i32 %t1180 + store ptr @.str2953, ptr %t1193 + %t1194 = add i32 %t1180, 1 + store i32 %t1194, ptr %t1177 + br label %ifend202 +ifend202: + %t1195 = load ptr, ptr %t1 + %t1196 = call i32 @fn_str_eq(ptr %t1195, ptr @.str2954) + %t1197 = icmp ne i32 %t1196, 0 + br i1 %t1197, label %then209, label %ifend211 +then209: + store ptr @.str2955, ptr %t91 + %t1198 = load ptr, ptr %t98 + %t1199 = getelementptr inbounds %LSlice, ptr %t1198, i32 0, i32 1 + %t1200 = getelementptr inbounds %LSlice, ptr %t1198, i32 0, i32 2 + %t1201 = getelementptr inbounds %LSlice, ptr %t1198, i32 0, i32 0 + %t1202 = load i32, ptr %t1199 + %t1203 = load i32, ptr %t1200 + %t1204 = icmp sge i32 %t1202, %t1203 + br i1 %t1204, label %grow212, label %put213 +grow212: + %t1205 = mul i32 %t1203, 2 + %t1206 = icmp eq i32 %t1203, 0 + %t1207 = select i1 %t1206, i32 8, i32 %t1205 + %t1208 = getelementptr ptr, ptr null, i32 1 + %t1209 = ptrtoint ptr %t1208 to i64 + %t1210 = zext i32 %t1207 to i64 + %t1211 = mul i64 %t1210, %t1209 + %t1212 = load ptr, ptr %t1201 + %t1213 = call ptr @realloc(ptr %t1212, i64 %t1211) + store ptr %t1213, ptr %t1201 + store i32 %t1207, ptr %t1200 + br label %put213 +put213: + %t1214 = load ptr, ptr %t1201 + %t1215 = getelementptr inbounds ptr, ptr %t1214, i32 %t1202 + store ptr @.str2956, ptr %t1215 + %t1216 = add i32 %t1202, 1 + store i32 %t1216, ptr %t1199 + %t1217 = load ptr, ptr %t98 + %t1218 = getelementptr inbounds %LSlice, ptr %t1217, i32 0, i32 1 + %t1219 = getelementptr inbounds %LSlice, ptr %t1217, i32 0, i32 2 + %t1220 = getelementptr inbounds %LSlice, ptr %t1217, i32 0, i32 0 + %t1221 = load i32, ptr %t1218 + %t1222 = load i32, ptr %t1219 + %t1223 = icmp sge i32 %t1221, %t1222 + br i1 %t1223, label %grow214, label %put215 +grow214: + %t1224 = mul i32 %t1222, 2 + %t1225 = icmp eq i32 %t1222, 0 + %t1226 = select i1 %t1225, i32 8, i32 %t1224 + %t1227 = getelementptr ptr, ptr null, i32 1 + %t1228 = ptrtoint ptr %t1227 to i64 + %t1229 = zext i32 %t1226 to i64 + %t1230 = mul i64 %t1229, %t1228 + %t1231 = load ptr, ptr %t1220 + %t1232 = call ptr @realloc(ptr %t1231, i64 %t1230) + store ptr %t1232, ptr %t1220 + store i32 %t1226, ptr %t1219 + br label %put215 +put215: + %t1233 = load ptr, ptr %t1220 + %t1234 = getelementptr inbounds ptr, ptr %t1233, i32 %t1221 + store ptr @.str2957, ptr %t1234 + %t1235 = add i32 %t1221, 1 + store i32 %t1235, ptr %t1218 + %t1236 = load ptr, ptr %t98 + %t1237 = getelementptr inbounds %LSlice, ptr %t1236, i32 0, i32 1 + %t1238 = getelementptr inbounds %LSlice, ptr %t1236, i32 0, i32 2 + %t1239 = getelementptr inbounds %LSlice, ptr %t1236, i32 0, i32 0 + %t1240 = load i32, ptr %t1237 + %t1241 = load i32, ptr %t1238 + %t1242 = icmp sge i32 %t1240, %t1241 + br i1 %t1242, label %grow216, label %put217 +grow216: + %t1243 = mul i32 %t1241, 2 + %t1244 = icmp eq i32 %t1241, 0 + %t1245 = select i1 %t1244, i32 8, i32 %t1243 + %t1246 = getelementptr ptr, ptr null, i32 1 + %t1247 = ptrtoint ptr %t1246 to i64 + %t1248 = zext i32 %t1245 to i64 + %t1249 = mul i64 %t1248, %t1247 + %t1250 = load ptr, ptr %t1239 + %t1251 = call ptr @realloc(ptr %t1250, i64 %t1249) + store ptr %t1251, ptr %t1239 + store i32 %t1245, ptr %t1238 + br label %put217 +put217: + %t1252 = load ptr, ptr %t1239 + %t1253 = getelementptr inbounds ptr, ptr %t1252, i32 %t1240 + store ptr @.str2958, ptr %t1253 + %t1254 = add i32 %t1240, 1 + store i32 %t1254, ptr %t1237 + %t1255 = load ptr, ptr %t98 + %t1256 = getelementptr inbounds %LSlice, ptr %t1255, i32 0, i32 1 + %t1257 = getelementptr inbounds %LSlice, ptr %t1255, i32 0, i32 2 + %t1258 = getelementptr inbounds %LSlice, ptr %t1255, i32 0, i32 0 + %t1259 = load i32, ptr %t1256 + %t1260 = load i32, ptr %t1257 + %t1261 = icmp sge i32 %t1259, %t1260 + br i1 %t1261, label %grow218, label %put219 +grow218: + %t1262 = mul i32 %t1260, 2 + %t1263 = icmp eq i32 %t1260, 0 + %t1264 = select i1 %t1263, i32 8, i32 %t1262 + %t1265 = getelementptr ptr, ptr null, i32 1 + %t1266 = ptrtoint ptr %t1265 to i64 + %t1267 = zext i32 %t1264 to i64 + %t1268 = mul i64 %t1267, %t1266 + %t1269 = load ptr, ptr %t1258 + %t1270 = call ptr @realloc(ptr %t1269, i64 %t1268) + store ptr %t1270, ptr %t1258 + store i32 %t1264, ptr %t1257 + br label %put219 +put219: + %t1271 = load ptr, ptr %t1258 + %t1272 = getelementptr inbounds ptr, ptr %t1271, i32 %t1259 + store ptr @.str2959, ptr %t1272 + %t1273 = add i32 %t1259, 1 + store i32 %t1273, ptr %t1256 + br label %ifend211 +ifend211: + br label %ifend50 +ifend50: + %t1274 = load ptr, ptr %t0 + %t1275 = call i32 @fn_str_eq(ptr %t1274, ptr @.str2960) + %t1276 = icmp ne i32 %t1275, 0 + br i1 %t1276, label %then220, label %ifend222 +then220: + %t1277 = load ptr, ptr %t1 + %t1278 = call i32 @fn_str_eq(ptr %t1277, ptr @.str2961) + %t1279 = icmp ne i32 %t1278, 0 + br i1 %t1279, label %then223, label %ifend225 +then223: + store ptr @.str2962, ptr %t91 + %t1280 = load ptr, ptr %t98 + %t1281 = getelementptr inbounds %LSlice, ptr %t1280, i32 0, i32 1 + %t1282 = getelementptr inbounds %LSlice, ptr %t1280, i32 0, i32 2 + %t1283 = getelementptr inbounds %LSlice, ptr %t1280, i32 0, i32 0 + %t1284 = load i32, ptr %t1281 + %t1285 = load i32, ptr %t1282 + %t1286 = icmp sge i32 %t1284, %t1285 + br i1 %t1286, label %grow226, label %put227 +grow226: + %t1287 = mul i32 %t1285, 2 + %t1288 = icmp eq i32 %t1285, 0 + %t1289 = select i1 %t1288, i32 8, i32 %t1287 + %t1290 = getelementptr ptr, ptr null, i32 1 + %t1291 = ptrtoint ptr %t1290 to i64 + %t1292 = zext i32 %t1289 to i64 + %t1293 = mul i64 %t1292, %t1291 + %t1294 = load ptr, ptr %t1283 + %t1295 = call ptr @realloc(ptr %t1294, i64 %t1293) + store ptr %t1295, ptr %t1283 + store i32 %t1289, ptr %t1282 + br label %put227 +put227: + %t1296 = load ptr, ptr %t1283 + %t1297 = getelementptr inbounds ptr, ptr %t1296, i32 %t1284 + store ptr @.str2963, ptr %t1297 + %t1298 = add i32 %t1284, 1 + store i32 %t1298, ptr %t1281 + %t1299 = load ptr, ptr %t98 + %t1300 = getelementptr inbounds %LSlice, ptr %t1299, i32 0, i32 1 + %t1301 = getelementptr inbounds %LSlice, ptr %t1299, i32 0, i32 2 + %t1302 = getelementptr inbounds %LSlice, ptr %t1299, i32 0, i32 0 + %t1303 = load i32, ptr %t1300 + %t1304 = load i32, ptr %t1301 + %t1305 = icmp sge i32 %t1303, %t1304 + br i1 %t1305, label %grow228, label %put229 +grow228: + %t1306 = mul i32 %t1304, 2 + %t1307 = icmp eq i32 %t1304, 0 + %t1308 = select i1 %t1307, i32 8, i32 %t1306 + %t1309 = getelementptr ptr, ptr null, i32 1 + %t1310 = ptrtoint ptr %t1309 to i64 + %t1311 = zext i32 %t1308 to i64 + %t1312 = mul i64 %t1311, %t1310 + %t1313 = load ptr, ptr %t1302 + %t1314 = call ptr @realloc(ptr %t1313, i64 %t1312) + store ptr %t1314, ptr %t1302 + store i32 %t1308, ptr %t1301 + br label %put229 +put229: + %t1315 = load ptr, ptr %t1302 + %t1316 = getelementptr inbounds ptr, ptr %t1315, i32 %t1303 + store ptr @.str2964, ptr %t1316 + %t1317 = add i32 %t1303, 1 + store i32 %t1317, ptr %t1300 + br label %ifend225 +ifend225: + %t1318 = load ptr, ptr %t1 + %t1319 = call i32 @fn_str_eq(ptr %t1318, ptr @.str2965) + %t1320 = icmp ne i32 %t1319, 0 + br i1 %t1320, label %then230, label %ifend232 +then230: + store ptr @.str2966, ptr %t91 + %t1321 = load ptr, ptr %t98 + %t1322 = getelementptr inbounds %LSlice, ptr %t1321, i32 0, i32 1 + %t1323 = getelementptr inbounds %LSlice, ptr %t1321, i32 0, i32 2 + %t1324 = getelementptr inbounds %LSlice, ptr %t1321, i32 0, i32 0 + %t1325 = load i32, ptr %t1322 + %t1326 = load i32, ptr %t1323 + %t1327 = icmp sge i32 %t1325, %t1326 + br i1 %t1327, label %grow233, label %put234 +grow233: + %t1328 = mul i32 %t1326, 2 + %t1329 = icmp eq i32 %t1326, 0 + %t1330 = select i1 %t1329, i32 8, i32 %t1328 + %t1331 = getelementptr ptr, ptr null, i32 1 + %t1332 = ptrtoint ptr %t1331 to i64 + %t1333 = zext i32 %t1330 to i64 + %t1334 = mul i64 %t1333, %t1332 + %t1335 = load ptr, ptr %t1324 + %t1336 = call ptr @realloc(ptr %t1335, i64 %t1334) + store ptr %t1336, ptr %t1324 + store i32 %t1330, ptr %t1323 + br label %put234 +put234: + %t1337 = load ptr, ptr %t1324 + %t1338 = getelementptr inbounds ptr, ptr %t1337, i32 %t1325 + store ptr @.str2967, ptr %t1338 + %t1339 = add i32 %t1325, 1 + store i32 %t1339, ptr %t1322 + %t1340 = load ptr, ptr %t98 + %t1341 = getelementptr inbounds %LSlice, ptr %t1340, i32 0, i32 1 + %t1342 = getelementptr inbounds %LSlice, ptr %t1340, i32 0, i32 2 + %t1343 = getelementptr inbounds %LSlice, ptr %t1340, i32 0, i32 0 + %t1344 = load i32, ptr %t1341 + %t1345 = load i32, ptr %t1342 + %t1346 = icmp sge i32 %t1344, %t1345 + br i1 %t1346, label %grow235, label %put236 +grow235: + %t1347 = mul i32 %t1345, 2 + %t1348 = icmp eq i32 %t1345, 0 + %t1349 = select i1 %t1348, i32 8, i32 %t1347 + %t1350 = getelementptr ptr, ptr null, i32 1 + %t1351 = ptrtoint ptr %t1350 to i64 + %t1352 = zext i32 %t1349 to i64 + %t1353 = mul i64 %t1352, %t1351 + %t1354 = load ptr, ptr %t1343 + %t1355 = call ptr @realloc(ptr %t1354, i64 %t1353) + store ptr %t1355, ptr %t1343 + store i32 %t1349, ptr %t1342 + br label %put236 +put236: + %t1356 = load ptr, ptr %t1343 + %t1357 = getelementptr inbounds ptr, ptr %t1356, i32 %t1344 + store ptr @.str2968, ptr %t1357 + %t1358 = add i32 %t1344, 1 + store i32 %t1358, ptr %t1341 + br label %ifend232 +ifend232: + %t1359 = load ptr, ptr %t1 + %t1360 = call i32 @fn_str_eq(ptr %t1359, ptr @.str2969) + %t1361 = icmp ne i32 %t1360, 0 + br i1 %t1361, label %then237, label %ifend239 +then237: + store ptr @.str2970, ptr %t91 + %t1362 = load ptr, ptr %t98 + %t1363 = getelementptr inbounds %LSlice, ptr %t1362, i32 0, i32 1 + %t1364 = getelementptr inbounds %LSlice, ptr %t1362, i32 0, i32 2 + %t1365 = getelementptr inbounds %LSlice, ptr %t1362, i32 0, i32 0 + %t1366 = load i32, ptr %t1363 + %t1367 = load i32, ptr %t1364 + %t1368 = icmp sge i32 %t1366, %t1367 + br i1 %t1368, label %grow240, label %put241 +grow240: + %t1369 = mul i32 %t1367, 2 + %t1370 = icmp eq i32 %t1367, 0 + %t1371 = select i1 %t1370, i32 8, i32 %t1369 + %t1372 = getelementptr ptr, ptr null, i32 1 + %t1373 = ptrtoint ptr %t1372 to i64 + %t1374 = zext i32 %t1371 to i64 + %t1375 = mul i64 %t1374, %t1373 + %t1376 = load ptr, ptr %t1365 + %t1377 = call ptr @realloc(ptr %t1376, i64 %t1375) + store ptr %t1377, ptr %t1365 + store i32 %t1371, ptr %t1364 + br label %put241 +put241: + %t1378 = load ptr, ptr %t1365 + %t1379 = getelementptr inbounds ptr, ptr %t1378, i32 %t1366 + store ptr @.str2971, ptr %t1379 + %t1380 = add i32 %t1366, 1 + store i32 %t1380, ptr %t1363 + %t1381 = load ptr, ptr %t98 + %t1382 = getelementptr inbounds %LSlice, ptr %t1381, i32 0, i32 1 + %t1383 = getelementptr inbounds %LSlice, ptr %t1381, i32 0, i32 2 + %t1384 = getelementptr inbounds %LSlice, ptr %t1381, i32 0, i32 0 + %t1385 = load i32, ptr %t1382 + %t1386 = load i32, ptr %t1383 + %t1387 = icmp sge i32 %t1385, %t1386 + br i1 %t1387, label %grow242, label %put243 +grow242: + %t1388 = mul i32 %t1386, 2 + %t1389 = icmp eq i32 %t1386, 0 + %t1390 = select i1 %t1389, i32 8, i32 %t1388 + %t1391 = getelementptr ptr, ptr null, i32 1 + %t1392 = ptrtoint ptr %t1391 to i64 + %t1393 = zext i32 %t1390 to i64 + %t1394 = mul i64 %t1393, %t1392 + %t1395 = load ptr, ptr %t1384 + %t1396 = call ptr @realloc(ptr %t1395, i64 %t1394) + store ptr %t1396, ptr %t1384 + store i32 %t1390, ptr %t1383 + br label %put243 +put243: + %t1397 = load ptr, ptr %t1384 + %t1398 = getelementptr inbounds ptr, ptr %t1397, i32 %t1385 + store ptr @.str2972, ptr %t1398 + %t1399 = add i32 %t1385, 1 + store i32 %t1399, ptr %t1382 + br label %ifend239 +ifend239: + br label %ifend222 +ifend222: + %t1400 = load ptr, ptr %t0 + %t1401 = call i32 @fn_str_eq(ptr %t1400, ptr @.str2973) + %t1402 = icmp ne i32 %t1401, 0 + br i1 %t1402, label %then244, label %ifend246 +then244: + %t1403 = load ptr, ptr %t1 + %t1404 = call i32 @fn_str_eq(ptr %t1403, ptr @.str2974) + %t1405 = icmp ne i32 %t1404, 0 + br i1 %t1405, label %then247, label %ifend249 +then247: + store ptr @.str2975, ptr %t91 + %t1406 = load ptr, ptr %t98 + %t1407 = getelementptr inbounds %LSlice, ptr %t1406, i32 0, i32 1 + %t1408 = getelementptr inbounds %LSlice, ptr %t1406, i32 0, i32 2 + %t1409 = getelementptr inbounds %LSlice, ptr %t1406, i32 0, i32 0 + %t1410 = load i32, ptr %t1407 + %t1411 = load i32, ptr %t1408 + %t1412 = icmp sge i32 %t1410, %t1411 + br i1 %t1412, label %grow250, label %put251 +grow250: + %t1413 = mul i32 %t1411, 2 + %t1414 = icmp eq i32 %t1411, 0 + %t1415 = select i1 %t1414, i32 8, i32 %t1413 + %t1416 = getelementptr ptr, ptr null, i32 1 + %t1417 = ptrtoint ptr %t1416 to i64 + %t1418 = zext i32 %t1415 to i64 + %t1419 = mul i64 %t1418, %t1417 + %t1420 = load ptr, ptr %t1409 + %t1421 = call ptr @realloc(ptr %t1420, i64 %t1419) + store ptr %t1421, ptr %t1409 + store i32 %t1415, ptr %t1408 + br label %put251 +put251: + %t1422 = load ptr, ptr %t1409 + %t1423 = getelementptr inbounds ptr, ptr %t1422, i32 %t1410 + store ptr @.str2976, ptr %t1423 + %t1424 = add i32 %t1410, 1 + store i32 %t1424, ptr %t1407 + %t1425 = load ptr, ptr %t98 + %t1426 = getelementptr inbounds %LSlice, ptr %t1425, i32 0, i32 1 + %t1427 = getelementptr inbounds %LSlice, ptr %t1425, i32 0, i32 2 + %t1428 = getelementptr inbounds %LSlice, ptr %t1425, i32 0, i32 0 + %t1429 = load i32, ptr %t1426 + %t1430 = load i32, ptr %t1427 + %t1431 = icmp sge i32 %t1429, %t1430 + br i1 %t1431, label %grow252, label %put253 +grow252: + %t1432 = mul i32 %t1430, 2 + %t1433 = icmp eq i32 %t1430, 0 + %t1434 = select i1 %t1433, i32 8, i32 %t1432 + %t1435 = getelementptr ptr, ptr null, i32 1 + %t1436 = ptrtoint ptr %t1435 to i64 + %t1437 = zext i32 %t1434 to i64 + %t1438 = mul i64 %t1437, %t1436 + %t1439 = load ptr, ptr %t1428 + %t1440 = call ptr @realloc(ptr %t1439, i64 %t1438) + store ptr %t1440, ptr %t1428 + store i32 %t1434, ptr %t1427 + br label %put253 +put253: + %t1441 = load ptr, ptr %t1428 + %t1442 = getelementptr inbounds ptr, ptr %t1441, i32 %t1429 + store ptr @.str2977, ptr %t1442 + %t1443 = add i32 %t1429, 1 + store i32 %t1443, ptr %t1426 + br label %ifend249 +ifend249: + %t1444 = load ptr, ptr %t1 + %t1445 = call i32 @fn_str_eq(ptr %t1444, ptr @.str2978) + %t1446 = icmp ne i32 %t1445, 0 + br i1 %t1446, label %then254, label %ifend256 +then254: + store ptr @.str2979, ptr %t91 + %t1447 = load ptr, ptr %t98 + %t1448 = getelementptr inbounds %LSlice, ptr %t1447, i32 0, i32 1 + %t1449 = getelementptr inbounds %LSlice, ptr %t1447, i32 0, i32 2 + %t1450 = getelementptr inbounds %LSlice, ptr %t1447, i32 0, i32 0 + %t1451 = load i32, ptr %t1448 + %t1452 = load i32, ptr %t1449 + %t1453 = icmp sge i32 %t1451, %t1452 + br i1 %t1453, label %grow257, label %put258 +grow257: + %t1454 = mul i32 %t1452, 2 + %t1455 = icmp eq i32 %t1452, 0 + %t1456 = select i1 %t1455, i32 8, i32 %t1454 + %t1457 = getelementptr ptr, ptr null, i32 1 + %t1458 = ptrtoint ptr %t1457 to i64 + %t1459 = zext i32 %t1456 to i64 + %t1460 = mul i64 %t1459, %t1458 + %t1461 = load ptr, ptr %t1450 + %t1462 = call ptr @realloc(ptr %t1461, i64 %t1460) + store ptr %t1462, ptr %t1450 + store i32 %t1456, ptr %t1449 + br label %put258 +put258: + %t1463 = load ptr, ptr %t1450 + %t1464 = getelementptr inbounds ptr, ptr %t1463, i32 %t1451 + store ptr @.str2980, ptr %t1464 + %t1465 = add i32 %t1451, 1 + store i32 %t1465, ptr %t1448 + br label %ifend256 +ifend256: + %t1466 = load ptr, ptr %t1 + %t1467 = call i32 @fn_str_eq(ptr %t1466, ptr @.str2981) + %t1468 = icmp ne i32 %t1467, 0 + br i1 %t1468, label %then259, label %ifend261 +then259: + store ptr @.str2982, ptr %t91 + %t1469 = load ptr, ptr %t98 + %t1470 = getelementptr inbounds %LSlice, ptr %t1469, i32 0, i32 1 + %t1471 = getelementptr inbounds %LSlice, ptr %t1469, i32 0, i32 2 + %t1472 = getelementptr inbounds %LSlice, ptr %t1469, i32 0, i32 0 + %t1473 = load i32, ptr %t1470 + %t1474 = load i32, ptr %t1471 + %t1475 = icmp sge i32 %t1473, %t1474 + br i1 %t1475, label %grow262, label %put263 +grow262: + %t1476 = mul i32 %t1474, 2 + %t1477 = icmp eq i32 %t1474, 0 + %t1478 = select i1 %t1477, i32 8, i32 %t1476 + %t1479 = getelementptr ptr, ptr null, i32 1 + %t1480 = ptrtoint ptr %t1479 to i64 + %t1481 = zext i32 %t1478 to i64 + %t1482 = mul i64 %t1481, %t1480 + %t1483 = load ptr, ptr %t1472 + %t1484 = call ptr @realloc(ptr %t1483, i64 %t1482) + store ptr %t1484, ptr %t1472 + store i32 %t1478, ptr %t1471 + br label %put263 +put263: + %t1485 = load ptr, ptr %t1472 + %t1486 = getelementptr inbounds ptr, ptr %t1485, i32 %t1473 + store ptr @.str2983, ptr %t1486 + %t1487 = add i32 %t1473, 1 + store i32 %t1487, ptr %t1470 + br label %ifend261 +ifend261: + %t1488 = load ptr, ptr %t1 + %t1489 = call i32 @fn_str_eq(ptr %t1488, ptr @.str2984) + %t1490 = icmp ne i32 %t1489, 0 + br i1 %t1490, label %then264, label %ifend266 +then264: + store ptr @.str2985, ptr %t91 + br label %ifend266 +ifend266: + %t1491 = load ptr, ptr %t1 + %t1492 = call i32 @fn_str_eq(ptr %t1491, ptr @.str2986) + %t1493 = icmp ne i32 %t1492, 0 + br i1 %t1493, label %then267, label %ifend269 +then267: + store ptr @.str2987, ptr %t91 + %t1494 = load ptr, ptr %t98 + %t1495 = getelementptr inbounds %LSlice, ptr %t1494, i32 0, i32 1 + %t1496 = getelementptr inbounds %LSlice, ptr %t1494, i32 0, i32 2 + %t1497 = getelementptr inbounds %LSlice, ptr %t1494, i32 0, i32 0 + %t1498 = load i32, ptr %t1495 + %t1499 = load i32, ptr %t1496 + %t1500 = icmp sge i32 %t1498, %t1499 + br i1 %t1500, label %grow270, label %put271 +grow270: + %t1501 = mul i32 %t1499, 2 + %t1502 = icmp eq i32 %t1499, 0 + %t1503 = select i1 %t1502, i32 8, i32 %t1501 + %t1504 = getelementptr ptr, ptr null, i32 1 + %t1505 = ptrtoint ptr %t1504 to i64 + %t1506 = zext i32 %t1503 to i64 + %t1507 = mul i64 %t1506, %t1505 + %t1508 = load ptr, ptr %t1497 + %t1509 = call ptr @realloc(ptr %t1508, i64 %t1507) + store ptr %t1509, ptr %t1497 + store i32 %t1503, ptr %t1496 + br label %put271 +put271: + %t1510 = load ptr, ptr %t1497 + %t1511 = getelementptr inbounds ptr, ptr %t1510, i32 %t1498 + store ptr @.str2988, ptr %t1511 + %t1512 = add i32 %t1498, 1 + store i32 %t1512, ptr %t1495 + br label %ifend269 +ifend269: + %t1513 = load ptr, ptr %t1 + %t1514 = call i32 @fn_str_eq(ptr %t1513, ptr @.str2989) + %t1515 = icmp ne i32 %t1514, 0 + br i1 %t1515, label %then272, label %ifend274 +then272: + store ptr @.str2990, ptr %t91 + br label %ifend274 +ifend274: + br label %ifend246 +ifend246: + %t1516 = load ptr, ptr %t0 + %t1517 = call i32 @fn_str_eq(ptr %t1516, ptr @.str2991) + %t1518 = icmp ne i32 %t1517, 0 + br i1 %t1518, label %then275, label %ifend277 +then275: + %t1519 = load ptr, ptr %t1 + %t1520 = call i32 @fn_str_eq(ptr %t1519, ptr @.str2992) + %t1521 = icmp ne i32 %t1520, 0 + br i1 %t1521, label %then278, label %ifend280 +then278: + store ptr @.str2993, ptr %t91 + br label %ifend280 +ifend280: + br label %ifend277 +ifend277: + %t1522 = load ptr, ptr %t0 + %t1523 = call i32 @fn_str_eq(ptr %t1522, ptr @.str2994) + %t1524 = icmp ne i32 %t1523, 0 + br i1 %t1524, label %then281, label %ifend283 +then281: + %t1525 = load ptr, ptr %t1 + %t1526 = call i32 @fn_str_eq(ptr %t1525, ptr @.str2995) + %t1527 = icmp ne i32 %t1526, 0 + br i1 %t1527, label %then284, label %ifend286 +then284: + store ptr @.str2996, ptr %t91 + br label %ifend286 +ifend286: + %t1528 = load ptr, ptr %t1 + %t1529 = call i32 @fn_str_eq(ptr %t1528, ptr @.str2997) + %t1530 = icmp ne i32 %t1529, 0 + br i1 %t1530, label %then287, label %ifend289 +then287: + store ptr @.str2998, ptr %t91 + br label %ifend289 +ifend289: + %t1531 = load ptr, ptr %t1 + %t1532 = call i32 @fn_str_eq(ptr %t1531, ptr @.str2999) + %t1533 = icmp ne i32 %t1532, 0 + br i1 %t1533, label %then290, label %ifend292 +then290: + store ptr @.str3000, ptr %t91 + br label %ifend292 +ifend292: + %t1534 = load ptr, ptr %t1 + %t1535 = call i32 @fn_str_eq(ptr %t1534, ptr @.str3001) + %t1536 = icmp ne i32 %t1535, 0 + br i1 %t1536, label %then293, label %ifend295 +then293: + store ptr @.str3002, ptr %t91 + br label %ifend295 +ifend295: + %t1537 = load ptr, ptr %t1 + %t1538 = call i32 @fn_str_eq(ptr %t1537, ptr @.str3003) + %t1539 = icmp ne i32 %t1538, 0 + br i1 %t1539, label %then296, label %ifend298 +then296: + store ptr @.str3004, ptr %t91 + br label %ifend298 +ifend298: + %t1540 = load ptr, ptr %t1 + %t1541 = call i32 @fn_str_eq(ptr %t1540, ptr @.str3005) + %t1542 = icmp ne i32 %t1541, 0 + br i1 %t1542, label %then299, label %ifend301 +then299: + store ptr @.str3006, ptr %t91 + br label %ifend301 +ifend301: + %t1543 = load ptr, ptr %t1 + %t1544 = call i32 @fn_str_eq(ptr %t1543, ptr @.str3007) + %t1545 = icmp ne i32 %t1544, 0 + br i1 %t1545, label %then302, label %ifend304 +then302: + store ptr @.str3008, ptr %t91 + br label %ifend304 +ifend304: + %t1546 = load ptr, ptr %t1 + %t1547 = call i32 @fn_str_eq(ptr %t1546, ptr @.str3009) + %t1548 = icmp ne i32 %t1547, 0 + br i1 %t1548, label %then305, label %ifend307 +then305: + store ptr @.str3010, ptr %t91 + br label %ifend307 +ifend307: + %t1549 = load ptr, ptr %t1 + %t1550 = call i32 @fn_str_eq(ptr %t1549, ptr @.str3011) + %t1551 = icmp ne i32 %t1550, 0 + br i1 %t1551, label %then308, label %ifend310 +then308: + store ptr @.str3012, ptr %t91 + br label %ifend310 +ifend310: + %t1552 = load ptr, ptr %t1 + %t1553 = call i32 @fn_str_eq(ptr %t1552, ptr @.str3013) + %t1554 = icmp ne i32 %t1553, 0 + br i1 %t1554, label %then311, label %ifend313 +then311: + store ptr @.str3014, ptr %t91 + br label %ifend313 +ifend313: + %t1555 = load ptr, ptr %t1 + %t1556 = call i32 @fn_str_eq(ptr %t1555, ptr @.str3015) + %t1557 = icmp ne i32 %t1556, 0 + br i1 %t1557, label %then314, label %ifend316 +then314: + store ptr @.str3016, ptr %t91 + br label %ifend316 +ifend316: + %t1558 = load ptr, ptr %t1 + %t1559 = call i32 @fn_str_eq(ptr %t1558, ptr @.str3017) + %t1560 = icmp ne i32 %t1559, 0 + br i1 %t1560, label %then317, label %ifend319 +then317: + store ptr @.str3018, ptr %t91 + br label %ifend319 +ifend319: + %t1561 = load ptr, ptr %t1 + %t1562 = call i32 @fn_str_eq(ptr %t1561, ptr @.str3019) + %t1563 = icmp ne i32 %t1562, 0 + br i1 %t1563, label %then320, label %ifend322 +then320: + store ptr @.str3020, ptr %t91 + br label %ifend322 +ifend322: + %t1564 = load ptr, ptr %t1 + %t1565 = call i32 @fn_str_eq(ptr %t1564, ptr @.str3021) + %t1566 = icmp ne i32 %t1565, 0 + br i1 %t1566, label %then323, label %ifend325 +then323: + store ptr @.str3022, ptr %t91 + br label %ifend325 +ifend325: + %t1567 = load ptr, ptr %t1 + %t1568 = call i32 @fn_str_eq(ptr %t1567, ptr @.str3023) + %t1569 = icmp ne i32 %t1568, 0 + br i1 %t1569, label %then326, label %ifend328 +then326: + store ptr @.str3024, ptr %t91 + br label %ifend328 +ifend328: + %t1570 = load ptr, ptr %t1 + %t1571 = call i32 @fn_str_eq(ptr %t1570, ptr @.str3025) + %t1572 = icmp ne i32 %t1571, 0 + br i1 %t1572, label %then329, label %ifend331 +then329: + store ptr @.str3026, ptr %t91 + br label %ifend331 +ifend331: + br label %ifend283 +ifend283: + %t1573 = load ptr, ptr %t0 + %t1574 = call i32 @fn_str_eq(ptr %t1573, ptr @.str3027) + %t1575 = icmp ne i32 %t1574, 0 + br i1 %t1575, label %then332, label %ifend334 +then332: + %t1576 = load ptr, ptr %t1 + %t1577 = call i32 @fn_str_eq(ptr %t1576, ptr @.str3028) + %t1578 = icmp ne i32 %t1577, 0 + br i1 %t1578, label %then335, label %ifend337 +then335: + store ptr @.str3029, ptr %t91 + br label %ifend337 +ifend337: + %t1579 = load ptr, ptr %t1 + %t1580 = call i32 @fn_str_eq(ptr %t1579, ptr @.str3030) + %t1581 = icmp ne i32 %t1580, 0 + br i1 %t1581, label %then338, label %ifend340 +then338: + store ptr @.str3031, ptr %t91 + br label %ifend340 +ifend340: + %t1582 = load ptr, ptr %t1 + %t1583 = call i32 @fn_str_eq(ptr %t1582, ptr @.str3032) + %t1584 = icmp ne i32 %t1583, 0 + br i1 %t1584, label %then341, label %ifend343 +then341: + store ptr @.str3033, ptr %t91 + br label %ifend343 +ifend343: + %t1585 = load ptr, ptr %t1 + %t1586 = call i32 @fn_str_eq(ptr %t1585, ptr @.str3034) + %t1587 = icmp ne i32 %t1586, 0 + br i1 %t1587, label %then344, label %ifend346 +then344: + store ptr @.str3035, ptr %t91 + br label %ifend346 +ifend346: + %t1588 = load ptr, ptr %t1 + %t1589 = call i32 @fn_str_eq(ptr %t1588, ptr @.str3036) + %t1590 = icmp ne i32 %t1589, 0 + br i1 %t1590, label %then347, label %ifend349 +then347: + store ptr @.str3037, ptr %t91 + br label %ifend349 +ifend349: + %t1591 = load ptr, ptr %t1 + %t1592 = call i32 @fn_str_eq(ptr %t1591, ptr @.str3038) + %t1593 = icmp ne i32 %t1592, 0 + br i1 %t1593, label %then350, label %ifend352 +then350: + store ptr @.str3039, ptr %t91 + br label %ifend352 +ifend352: + %t1594 = load ptr, ptr %t1 + %t1595 = call i32 @fn_str_eq(ptr %t1594, ptr @.str3040) + %t1596 = icmp ne i32 %t1595, 0 + br i1 %t1596, label %then353, label %ifend355 +then353: + store ptr @.str3041, ptr %t91 + br label %ifend355 +ifend355: + %t1597 = load ptr, ptr %t1 + %t1598 = call i32 @fn_str_eq(ptr %t1597, ptr @.str3042) + %t1599 = icmp ne i32 %t1598, 0 + br i1 %t1599, label %then356, label %ifend358 +then356: + store ptr @.str3043, ptr %t91 + br label %ifend358 +ifend358: + %t1600 = load ptr, ptr %t1 + %t1601 = call i32 @fn_str_eq(ptr %t1600, ptr @.str3044) + %t1602 = icmp ne i32 %t1601, 0 + br i1 %t1602, label %then359, label %ifend361 +then359: + store ptr @.str3045, ptr %t91 + br label %ifend361 +ifend361: + br label %ifend334 +ifend334: + %t1603 = load ptr, ptr %t0 + %t1604 = call i32 @fn_str_eq(ptr %t1603, ptr @.str3046) + %t1605 = icmp ne i32 %t1604, 0 + br i1 %t1605, label %then362, label %ifend364 +then362: + %t1606 = load ptr, ptr %t1 + %t1607 = call i32 @fn_str_eq(ptr %t1606, ptr @.str3047) + %t1608 = icmp ne i32 %t1607, 0 + br i1 %t1608, label %then365, label %ifend367 +then365: + store ptr @.str3048, ptr %t91 + br label %ifend367 +ifend367: + %t1609 = load ptr, ptr %t1 + %t1610 = call i32 @fn_str_eq(ptr %t1609, ptr @.str3049) + %t1611 = icmp ne i32 %t1610, 0 + br i1 %t1611, label %then368, label %ifend370 +then368: + store ptr @.str3050, ptr %t91 + br label %ifend370 +ifend370: + %t1612 = load ptr, ptr %t1 + %t1613 = call i32 @fn_str_eq(ptr %t1612, ptr @.str3051) + %t1614 = icmp ne i32 %t1613, 0 + br i1 %t1614, label %then371, label %ifend373 +then371: + store ptr @.str3052, ptr %t91 + br label %ifend373 +ifend373: + %t1615 = load ptr, ptr %t1 + %t1616 = call i32 @fn_str_eq(ptr %t1615, ptr @.str3053) + %t1617 = icmp ne i32 %t1616, 0 + br i1 %t1617, label %then374, label %ifend376 +then374: + store ptr @.str3054, ptr %t91 + br label %ifend376 +ifend376: + %t1618 = load ptr, ptr %t1 + %t1619 = call i32 @fn_str_eq(ptr %t1618, ptr @.str3055) + %t1620 = icmp ne i32 %t1619, 0 + br i1 %t1620, label %then377, label %ifend379 +then377: + store ptr @.str3056, ptr %t91 + br label %ifend379 +ifend379: + %t1621 = load ptr, ptr %t1 + %t1622 = call i32 @fn_str_eq(ptr %t1621, ptr @.str3057) + %t1623 = icmp ne i32 %t1622, 0 + br i1 %t1623, label %then380, label %ifend382 +then380: + store ptr @.str3058, ptr %t91 + br label %ifend382 +ifend382: + %t1624 = load ptr, ptr %t1 + %t1625 = call i32 @fn_str_eq(ptr %t1624, ptr @.str3059) + %t1626 = icmp ne i32 %t1625, 0 + br i1 %t1626, label %then383, label %ifend385 +then383: + store ptr @.str3060, ptr %t91 + br label %ifend385 +ifend385: + %t1627 = load ptr, ptr %t1 + %t1628 = call i32 @fn_str_eq(ptr %t1627, ptr @.str3061) + %t1629 = icmp ne i32 %t1628, 0 + br i1 %t1629, label %then386, label %ifend388 +then386: + store ptr @.str3062, ptr %t91 + br label %ifend388 +ifend388: + %t1630 = load ptr, ptr %t1 + %t1631 = call i32 @fn_str_eq(ptr %t1630, ptr @.str3063) + %t1632 = icmp ne i32 %t1631, 0 + br i1 %t1632, label %then389, label %ifend391 +then389: + store ptr @.str3064, ptr %t91 + br label %ifend391 +ifend391: + %t1633 = load ptr, ptr %t1 + %t1634 = call i32 @fn_str_eq(ptr %t1633, ptr @.str3065) + %t1635 = icmp ne i32 %t1634, 0 + br i1 %t1635, label %then392, label %ifend394 +then392: + store ptr @.str3066, ptr %t91 + br label %ifend394 +ifend394: + %t1636 = load ptr, ptr %t1 + %t1637 = call i32 @fn_str_eq(ptr %t1636, ptr @.str3067) + %t1638 = icmp ne i32 %t1637, 0 + br i1 %t1638, label %then395, label %ifend397 +then395: + store ptr @.str3068, ptr %t91 + br label %ifend397 +ifend397: + %t1639 = load ptr, ptr %t1 + %t1640 = call i32 @fn_str_eq(ptr %t1639, ptr @.str3069) + %t1641 = icmp ne i32 %t1640, 0 + br i1 %t1641, label %then398, label %ifend400 +then398: + store ptr @.str3070, ptr %t91 + br label %ifend400 +ifend400: + %t1642 = load ptr, ptr %t1 + %t1643 = call i32 @fn_str_eq(ptr %t1642, ptr @.str3071) + %t1644 = icmp ne i32 %t1643, 0 + br i1 %t1644, label %then401, label %ifend403 +then401: + store ptr @.str3072, ptr %t91 + br label %ifend403 +ifend403: + %t1645 = load ptr, ptr %t1 + %t1646 = call i32 @fn_str_eq(ptr %t1645, ptr @.str3073) + %t1647 = icmp ne i32 %t1646, 0 + br i1 %t1647, label %then404, label %ifend406 +then404: + store ptr @.str3074, ptr %t91 + br label %ifend406 +ifend406: + br label %ifend364 +ifend364: + %t1648 = load ptr, ptr %t0 + %t1649 = call i32 @fn_str_eq(ptr %t1648, ptr @.str3075) + %t1650 = icmp ne i32 %t1649, 0 + br i1 %t1650, label %then407, label %ifend409 +then407: + %t1651 = load ptr, ptr %t1 + %t1652 = call i32 @fn_str_eq(ptr %t1651, ptr @.str3076) + %t1653 = icmp ne i32 %t1652, 0 + br i1 %t1653, label %then410, label %ifend412 +then410: + store ptr @.str3077, ptr %t91 + br label %ifend412 +ifend412: + %t1654 = load ptr, ptr %t1 + %t1655 = call i32 @fn_str_eq(ptr %t1654, ptr @.str3078) + %t1656 = icmp ne i32 %t1655, 0 + br i1 %t1656, label %then413, label %ifend415 +then413: + store ptr @.str3079, ptr %t91 + br label %ifend415 +ifend415: + br label %ifend409 +ifend409: + %t1657 = load ptr, ptr %t91 + %t1658 = icmp eq ptr %t1657, null + %t1659 = zext i1 %t1658 to i32 + %t1660 = icmp ne i32 %t1659, 0 + br i1 %t1660, label %then416, label %ifend418 +then416: + %t1661 = load ptr, ptr %t0 + %t1662 = call ptr @fn_str_concat(ptr @.str3080, ptr %t1661) + %t1663 = call ptr @fn_str_concat(ptr %t1662, ptr @.str3081) + %t1664 = load ptr, ptr %t1 + %t1665 = call ptr @fn_str_concat(ptr %t1663, ptr %t1664) + call void @fn_perr(ptr %t1665) + br label %ifend418 +ifend418: + %t1666 = load ptr, ptr %t2 + %t1667 = load ptr, ptr %t98 + call void @fn_reorder_named(ptr %t1666, ptr %t1667) + %t1668 = call ptr @fn_node(i32 33) + store ptr %t1668, ptr %t1669 + %t1670 = load ptr, ptr %t1669 + %t1671 = getelementptr inbounds %Cmp_Node, ptr %t1670, i32 0, i32 1 + %t1672 = load ptr, ptr %t91 + store ptr %t1672, ptr %t1671 + %t1673 = load ptr, ptr %t2 + %t1674 = getelementptr inbounds %Cmp_Node, ptr %t1673, i32 0, i32 4 + %t1675 = load ptr, ptr %t1669 + store ptr %t1675, ptr %t1674 + %t1676 = load ptr, ptr %t2 + %t1677 = call ptr @fn_emit_call(ptr %t1676) + store ptr %t1677, ptr %retval br label %ret ret: - %t760 = load ptr, ptr %retval - ret ptr %t760 + %t1678 = load ptr, ptr %retval + ret ptr %t1678 } define ptr @fn_emit_call(ptr %arg_e) { @@ -21686,7 +32846,7 @@ then3: store ptr %t32, ptr %retval br label %ret ifend5: - call void @fn_perr(ptr @.str1249) + call void @fn_perr(ptr @.str3082) br label %ifend2 ifend2: %t33 = load ptr, ptr %t0 @@ -21696,7 +32856,7 @@ ifend2: %t37 = load ptr, ptr %t36 store ptr %t37, ptr %t38 %t39 = load ptr, ptr %t38 - %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str1250) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str3083) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then6, label %ifend8 then6: @@ -21706,7 +32866,7 @@ then6: %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then9, label %ifend11 then9: - %t46 = call ptr @fn_val(ptr @.str1251, ptr @.str1252) + %t46 = call ptr @fn_val(ptr @.str3084, ptr @.str3085) store ptr %t46, ptr %retval br label %ret ifend11: @@ -21717,64 +32877,64 @@ ifend11: %t51 = sub i32 %t50, 1 %t52 = getelementptr inbounds ptr, ptr %t49, i32 %t51 %t53 = load ptr, ptr %t52 - %t54 = call ptr @fn_str_concat(ptr @.str1253, ptr %t53) + %t54 = call ptr @fn_str_concat(ptr @.str3086, ptr %t53) %t55 = call ptr @fn_emit_bind(ptr %t54) - %t56 = call ptr @fn_val(ptr %t55, ptr @.str1254) + %t56 = call ptr @fn_val(ptr %t55, ptr @.str3087) store ptr %t56, ptr %retval br label %ret ifend8: %t57 = load ptr, ptr %t38 - %t58 = call i32 @fn_str_eq(ptr %t57, ptr @.str1255) + %t58 = call i32 @fn_str_eq(ptr %t57, ptr @.str3088) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %then12, label %ifend14 then12: - %t60 = call ptr @fn_emit_bind(ptr @.str1256) - %t61 = call ptr @fn_val(ptr %t60, ptr @.str1257) + %t60 = call ptr @fn_emit_bind(ptr @.str3089) + %t61 = call ptr @fn_val(ptr %t60, ptr @.str3090) store ptr %t61, ptr %retval br label %ret ifend14: %t62 = load ptr, ptr %t38 - %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str1258) + %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str3091) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then15, label %ifend17 then15: - call void @fn_emit(ptr @.str1259) - %t65 = call ptr @fn_val(ptr @.str1260, ptr @.str1261) + call void @fn_emit(ptr @.str3092) + %t65 = call ptr @fn_val(ptr @.str3093, ptr @.str3094) store ptr %t65, ptr %retval br label %ret ifend17: %t66 = load ptr, ptr %t38 - %t67 = call i32 @fn_str_eq(ptr %t66, ptr @.str1262) + %t67 = call i32 @fn_str_eq(ptr %t66, ptr @.str3095) %t68 = icmp ne i32 %t67, 0 br i1 %t68, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str1263) - %t69 = call ptr @fn_val(ptr @.str1264, ptr @.str1265) + call void @fn_emit(ptr @.str3096) + %t69 = call ptr @fn_val(ptr @.str3097, ptr @.str3098) store ptr %t69, ptr %retval br label %ret ifend20: %t70 = load ptr, ptr %t38 - %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str1266) + %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str3099) %t72 = icmp ne i32 %t71, 0 br i1 %t72, label %then21, label %ifend23 then21: - %t73 = call ptr @fn_emit_bind(ptr @.str1267) - %t74 = call ptr @fn_val(ptr %t73, ptr @.str1268) + %t73 = call ptr @fn_emit_bind(ptr @.str3100) + %t74 = call ptr @fn_val(ptr %t73, ptr @.str3101) store ptr %t74, ptr %retval br label %ret ifend23: %t75 = load ptr, ptr %t38 - %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str1269) + %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str3102) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then24, label %ifend26 then24: - %t78 = call ptr @fn_emit_bind(ptr @.str1270) - %t79 = call ptr @fn_val(ptr %t78, ptr @.str1271) + %t78 = call ptr @fn_emit_bind(ptr @.str3103) + %t79 = call ptr @fn_val(ptr %t78, ptr @.str3104) store ptr %t79, ptr %retval br label %ret ifend26: %t80 = load ptr, ptr %t38 - %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str1272) + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str3105) %t82 = icmp ne i32 %t81, 0 br i1 %t82, label %then27, label %ifend29 then27: @@ -21790,15 +32950,15 @@ then27: %t92 = load ptr, ptr %t91 %t93 = getelementptr inbounds %Cmp_Val, ptr %t92, i32 0, i32 0 %t94 = load ptr, ptr %t93 - %t95 = call ptr @fn_str_concat(ptr @.str1273, ptr %t94) - %t96 = call ptr @fn_str_concat(ptr %t95, ptr @.str1274) + %t95 = call ptr @fn_str_concat(ptr @.str3106, ptr %t94) + %t96 = call ptr @fn_str_concat(ptr %t95, ptr @.str3107) %t97 = call ptr @fn_emit_bind(ptr %t96) - %t98 = call ptr @fn_val(ptr %t97, ptr @.str1275) + %t98 = call ptr @fn_val(ptr %t97, ptr @.str3108) store ptr %t98, ptr %retval br label %ret ifend29: %t99 = load ptr, ptr %t38 - %t100 = call i32 @fn_str_eq(ptr %t99, ptr @.str1276) + %t100 = call i32 @fn_str_eq(ptr %t99, ptr @.str3109) %t101 = icmp ne i32 %t100, 0 br i1 %t101, label %then30, label %ifend32 then30: @@ -21820,33 +32980,33 @@ then30: %t117 = load ptr, ptr %t116 %t118 = call ptr @fn_emit_expr(ptr %t117) store ptr %t118, ptr %t119 - call void @fn_emit(ptr @.str1277) + call void @fn_emit(ptr @.str3110) %t120 = load ptr, ptr %t110 %t121 = getelementptr inbounds %Cmp_Val, ptr %t120, i32 0, i32 0 %t122 = load ptr, ptr %t121 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str1278) + call void @fn_emit(ptr @.str3111) %t123 = load ptr, ptr %t119 %t124 = getelementptr inbounds %Cmp_Val, ptr %t123, i32 0, i32 0 %t125 = load ptr, ptr %t124 call void @fn_emit(ptr %t125) - call void @fn_emit(ptr @.str1279) - %t126 = call ptr @fn_val(ptr @.str1280, ptr @.str1281) + call void @fn_emit(ptr @.str3112) + %t126 = call ptr @fn_val(ptr @.str3113, ptr @.str3114) store ptr %t126, ptr %retval br label %ret ifend32: %t127 = load ptr, ptr %t38 - %t128 = call i32 @fn_str_eq(ptr %t127, ptr @.str1282) + %t128 = call i32 @fn_str_eq(ptr %t127, ptr @.str3115) %t129 = icmp ne i32 %t128, 0 br i1 %t129, label %then33, label %ifend35 then33: - call void @fn_emit(ptr @.str1283) - %t130 = call ptr @fn_val(ptr @.str1284, ptr @.str1285) + call void @fn_emit(ptr @.str3116) + %t130 = call ptr @fn_val(ptr @.str3117, ptr @.str3118) store ptr %t130, ptr %retval br label %ret ifend35: %t131 = load ptr, ptr %t38 - %t132 = call i32 @fn_str_eq(ptr %t131, ptr @.str1286) + %t132 = call i32 @fn_str_eq(ptr %t131, ptr @.str3119) %t133 = icmp ne i32 %t132, 0 br i1 %t133, label %then36, label %ifend38 then36: @@ -21871,20 +33031,20 @@ then36: %t152 = load ptr, ptr %t142 %t153 = getelementptr inbounds %Cmp_Val, ptr %t152, i32 0, i32 0 %t154 = load ptr, ptr %t153 - %t155 = call ptr @fn_str_concat(ptr @.str1287, ptr %t154) - %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str1288) + %t155 = call ptr @fn_str_concat(ptr @.str3120, ptr %t154) + %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str3121) %t157 = load ptr, ptr %t151 %t158 = getelementptr inbounds %Cmp_Val, ptr %t157, i32 0, i32 0 %t159 = load ptr, ptr %t158 %t160 = call ptr @fn_str_concat(ptr %t156, ptr %t159) - %t161 = call ptr @fn_str_concat(ptr %t160, ptr @.str1289) + %t161 = call ptr @fn_str_concat(ptr %t160, ptr @.str3122) %t162 = call ptr @fn_emit_bind(ptr %t161) - %t163 = call ptr @fn_val(ptr %t162, ptr @.str1290) + %t163 = call ptr @fn_val(ptr %t162, ptr @.str3123) store ptr %t163, ptr %retval br label %ret ifend38: %t164 = load ptr, ptr %t38 - %t165 = call i32 @fn_str_eq(ptr %t164, ptr @.str1291) + %t165 = call i32 @fn_str_eq(ptr %t164, ptr @.str3124) %t166 = icmp ne i32 %t165, 0 br i1 %t166, label %then39, label %ifend41 then39: @@ -21915,28 +33075,28 @@ then39: %t191 = load ptr, ptr %t190 %t192 = call ptr @fn_emit_expr(ptr %t191) store ptr %t192, ptr %t193 - call void @fn_emit(ptr @.str1292) + call void @fn_emit(ptr @.str3125) %t194 = load ptr, ptr %t175 %t195 = getelementptr inbounds %Cmp_Val, ptr %t194, i32 0, i32 0 %t196 = load ptr, ptr %t195 call void @fn_emit(ptr %t196) - call void @fn_emit(ptr @.str1293) + call void @fn_emit(ptr @.str3126) %t197 = load ptr, ptr %t184 %t198 = getelementptr inbounds %Cmp_Val, ptr %t197, i32 0, i32 0 %t199 = load ptr, ptr %t198 call void @fn_emit(ptr %t199) - call void @fn_emit(ptr @.str1294) + call void @fn_emit(ptr @.str3127) %t200 = load ptr, ptr %t193 %t201 = getelementptr inbounds %Cmp_Val, ptr %t200, i32 0, i32 0 %t202 = load ptr, ptr %t201 call void @fn_emit(ptr %t202) - call void @fn_emit(ptr @.str1295) - %t203 = call ptr @fn_val(ptr @.str1296, ptr @.str1297) + call void @fn_emit(ptr @.str3128) + %t203 = call ptr @fn_val(ptr @.str3129, ptr @.str3130) store ptr %t203, ptr %retval br label %ret ifend41: %t204 = load ptr, ptr %t38 - %t205 = call i32 @fn_str_eq(ptr %t204, ptr @.str1298) + %t205 = call i32 @fn_str_eq(ptr %t204, ptr @.str3131) %t206 = icmp ne i32 %t205, 0 br i1 %t206, label %then42, label %ifend44 then42: @@ -21952,15 +33112,15 @@ then42: %t216 = load ptr, ptr %t215 %t217 = getelementptr inbounds %Cmp_Val, ptr %t216, i32 0, i32 0 %t218 = load ptr, ptr %t217 - %t219 = call ptr @fn_str_concat(ptr @.str1299, ptr %t218) - %t220 = call ptr @fn_str_concat(ptr %t219, ptr @.str1300) + %t219 = call ptr @fn_str_concat(ptr @.str3132, ptr %t218) + %t220 = call ptr @fn_str_concat(ptr %t219, ptr @.str3133) %t221 = call ptr @fn_emit_bind(ptr %t220) - %t222 = call ptr @fn_val(ptr %t221, ptr @.str1301) + %t222 = call ptr @fn_val(ptr %t221, ptr @.str3134) store ptr %t222, ptr %retval br label %ret ifend44: %t223 = load ptr, ptr %t38 - %t224 = call i32 @fn_str_eq(ptr %t223, ptr @.str1302) + %t224 = call i32 @fn_str_eq(ptr %t223, ptr @.str3135) %t225 = icmp ne i32 %t224, 0 br i1 %t225, label %then45, label %ifend47 then45: @@ -21976,15 +33136,15 @@ then45: %t235 = load ptr, ptr %t234 %t236 = getelementptr inbounds %Cmp_Val, ptr %t235, i32 0, i32 0 %t237 = load ptr, ptr %t236 - %t238 = call ptr @fn_str_concat(ptr @.str1303, ptr %t237) - %t239 = call ptr @fn_str_concat(ptr %t238, ptr @.str1304) + %t238 = call ptr @fn_str_concat(ptr @.str3136, ptr %t237) + %t239 = call ptr @fn_str_concat(ptr %t238, ptr @.str3137) %t240 = call ptr @fn_emit_bind(ptr %t239) - %t241 = call ptr @fn_val(ptr %t240, ptr @.str1305) + %t241 = call ptr @fn_val(ptr %t240, ptr @.str3138) store ptr %t241, ptr %retval br label %ret ifend47: %t242 = load ptr, ptr %t38 - %t243 = call i32 @fn_str_eq(ptr %t242, ptr @.str1306) + %t243 = call i32 @fn_str_eq(ptr %t242, ptr @.str3139) %t244 = icmp ne i32 %t243, 0 br i1 %t244, label %then48, label %ifend50 then48: @@ -22006,23 +33166,23 @@ then48: %t260 = load ptr, ptr %t259 %t261 = call ptr @fn_emit_expr(ptr %t260) store ptr %t261, ptr %t262 - call void @fn_emit(ptr @.str1307) + call void @fn_emit(ptr @.str3140) %t263 = load ptr, ptr %t253 %t264 = getelementptr inbounds %Cmp_Val, ptr %t263, i32 0, i32 0 %t265 = load ptr, ptr %t264 call void @fn_emit(ptr %t265) - call void @fn_emit(ptr @.str1308) + call void @fn_emit(ptr @.str3141) %t266 = load ptr, ptr %t262 %t267 = getelementptr inbounds %Cmp_Val, ptr %t266, i32 0, i32 0 %t268 = load ptr, ptr %t267 call void @fn_emit(ptr %t268) - call void @fn_emit(ptr @.str1309) - %t269 = call ptr @fn_val(ptr @.str1310, ptr @.str1311) + call void @fn_emit(ptr @.str3142) + %t269 = call ptr @fn_val(ptr @.str3143, ptr @.str3144) store ptr %t269, ptr %retval br label %ret ifend50: %t270 = load ptr, ptr %t38 - %t271 = call i32 @fn_str_eq(ptr %t270, ptr @.str1312) + %t271 = call i32 @fn_str_eq(ptr %t270, ptr @.str3145) %t272 = icmp ne i32 %t271, 0 br i1 %t272, label %then51, label %ifend53 then51: @@ -22038,75 +33198,75 @@ then51: %t282 = load ptr, ptr %t281 %t283 = getelementptr inbounds %Cmp_Val, ptr %t282, i32 0, i32 0 %t284 = load ptr, ptr %t283 - %t285 = call ptr @fn_str_concat(ptr @.str1313, ptr %t284) - %t286 = call ptr @fn_str_concat(ptr %t285, ptr @.str1314) + %t285 = call ptr @fn_str_concat(ptr @.str3146, ptr %t284) + %t286 = call ptr @fn_str_concat(ptr %t285, ptr @.str3147) %t287 = call ptr @fn_emit_bind(ptr %t286) - %t288 = call ptr @fn_val(ptr %t287, ptr @.str1315) + %t288 = call ptr @fn_val(ptr %t287, ptr @.str3148) store ptr %t288, ptr %retval br label %ret ifend53: %t289 = load ptr, ptr %t38 - %t290 = call i32 @fn_str_eq(ptr %t289, ptr @.str1316) + %t290 = call i32 @fn_str_eq(ptr %t289, ptr @.str3149) %t291 = icmp ne i32 %t290, 0 br i1 %t291, label %then54, label %ifend56 then54: - %t292 = call ptr @fn_emit_bind(ptr @.str1317) + %t292 = call ptr @fn_emit_bind(ptr @.str3150) store ptr %t292, ptr %t293 %t294 = load ptr, ptr %t293 - %t295 = call ptr @fn_str_concat(ptr @.str1318, ptr %t294) - %t296 = call ptr @fn_str_concat(ptr %t295, ptr @.str1319) + %t295 = call ptr @fn_str_concat(ptr @.str3151, ptr %t294) + %t296 = call ptr @fn_str_concat(ptr %t295, ptr @.str3152) %t297 = call ptr @fn_emit_bind(ptr %t296) store ptr %t297, ptr %t298 %t299 = load ptr, ptr %t298 - %t300 = call ptr @fn_str_concat(ptr @.str1320, ptr %t299) - %t301 = call ptr @fn_str_concat(ptr %t300, ptr @.str1321) + %t300 = call ptr @fn_str_concat(ptr @.str3153, ptr %t299) + %t301 = call ptr @fn_str_concat(ptr %t300, ptr @.str3154) %t302 = call ptr @fn_emit_bind(ptr %t301) - %t303 = call ptr @fn_val(ptr %t302, ptr @.str1322) + %t303 = call ptr @fn_val(ptr %t302, ptr @.str3155) store ptr %t303, ptr %retval br label %ret ifend56: %t304 = load ptr, ptr %t38 - %t305 = call i32 @fn_str_eq(ptr %t304, ptr @.str1323) + %t305 = call i32 @fn_str_eq(ptr %t304, ptr @.str3156) %t306 = icmp ne i32 %t305, 0 br i1 %t306, label %then57, label %ifend59 then57: - %t307 = call ptr @fn_emit_bind(ptr @.str1324) - %t308 = call ptr @fn_val(ptr %t307, ptr @.str1325) + %t307 = call ptr @fn_emit_bind(ptr @.str3157) + %t308 = call ptr @fn_val(ptr %t307, ptr @.str3158) store ptr %t308, ptr %retval br label %ret ifend59: %t309 = load ptr, ptr %t38 - %t310 = call i32 @fn_str_eq(ptr %t309, ptr @.str1326) + %t310 = call i32 @fn_str_eq(ptr %t309, ptr @.str3159) %t311 = icmp ne i32 %t310, 0 br i1 %t311, label %then60, label %ifend62 then60: - call void @fn_emit(ptr @.str1327) - %t312 = call ptr @fn_val(ptr @.str1328, ptr @.str1329) + call void @fn_emit(ptr @.str3160) + %t312 = call ptr @fn_val(ptr @.str3161, ptr @.str3162) store ptr %t312, ptr %retval br label %ret ifend62: %t313 = load ptr, ptr %t38 - %t314 = call i32 @fn_str_eq(ptr %t313, ptr @.str1330) + %t314 = call i32 @fn_str_eq(ptr %t313, ptr @.str3163) %t315 = icmp ne i32 %t314, 0 br i1 %t315, label %then63, label %ifend65 then63: - call void @fn_emit(ptr @.str1331) - %t316 = call ptr @fn_val(ptr @.str1332, ptr @.str1333) + call void @fn_emit(ptr @.str3164) + %t316 = call ptr @fn_val(ptr @.str3165, ptr @.str3166) store ptr %t316, ptr %retval br label %ret ifend65: %t317 = load ptr, ptr %t38 - %t318 = call i32 @fn_str_eq(ptr %t317, ptr @.str1334) + %t318 = call i32 @fn_str_eq(ptr %t317, ptr @.str3167) %t319 = icmp ne i32 %t318, 0 br i1 %t319, label %then66, label %ifend68 then66: - call void @fn_emit(ptr @.str1335) - %t320 = call ptr @fn_val(ptr @.str1336, ptr @.str1337) + call void @fn_emit(ptr @.str3168) + %t320 = call ptr @fn_val(ptr @.str3169, ptr @.str3170) store ptr %t320, ptr %retval br label %ret ifend68: %t321 = load ptr, ptr %t38 - %t322 = call i32 @fn_str_eq(ptr %t321, ptr @.str1338) + %t322 = call i32 @fn_str_eq(ptr %t321, ptr @.str3171) %t323 = icmp ne i32 %t322, 0 br i1 %t323, label %then69, label %ifend71 then69: @@ -22119,18 +33279,18 @@ then69: %t330 = load ptr, ptr %t329 %t331 = call ptr @fn_emit_expr(ptr %t330) store ptr %t331, ptr %t332 - call void @fn_emit(ptr @.str1339) + call void @fn_emit(ptr @.str3172) %t333 = load ptr, ptr %t332 %t334 = getelementptr inbounds %Cmp_Val, ptr %t333, i32 0, i32 0 %t335 = load ptr, ptr %t334 call void @fn_emit(ptr %t335) - call void @fn_emit(ptr @.str1340) - %t336 = call ptr @fn_val(ptr @.str1341, ptr @.str1342) + call void @fn_emit(ptr @.str3173) + %t336 = call ptr @fn_val(ptr @.str3174, ptr @.str3175) store ptr %t336, ptr %retval br label %ret ifend71: %t337 = load ptr, ptr %t38 - %t338 = call i32 @fn_str_eq(ptr %t337, ptr @.str1343) + %t338 = call i32 @fn_str_eq(ptr %t337, ptr @.str3176) %t339 = icmp ne i32 %t338, 0 br i1 %t339, label %then72, label %ifend74 then72: @@ -22143,24 +33303,24 @@ then72: %t346 = load ptr, ptr %t345 %t347 = call ptr @fn_emit_expr(ptr %t346) store ptr %t347, ptr %t348 - call void @fn_emit(ptr @.str1344) + call void @fn_emit(ptr @.str3177) %t349 = load ptr, ptr %t348 %t350 = getelementptr inbounds %Cmp_Val, ptr %t349, i32 0, i32 0 %t351 = load ptr, ptr %t350 call void @fn_emit(ptr %t351) - call void @fn_emit(ptr @.str1345) - %t352 = call ptr @fn_val(ptr @.str1346, ptr @.str1347) + call void @fn_emit(ptr @.str3178) + %t352 = call ptr @fn_val(ptr @.str3179, ptr @.str3180) store ptr %t352, ptr %retval br label %ret ifend74: %t354 = load ptr, ptr %t38 - %t355 = call i32 @fn_str_eq(ptr %t354, ptr @.str1348) + %t355 = call i32 @fn_str_eq(ptr %t354, ptr @.str3181) %t356 = icmp ne i32 %t355, 0 %t357 = zext i1 %t356 to i32 store i32 %t357, ptr %t353 br i1 %t356, label %sc75, label %scend76 sc75: - %t358 = call ptr @fn_find_extern(ptr @.str1349) + %t358 = call ptr @fn_find_extern(ptr @.str3182) %t359 = icmp eq ptr %t358, null %t360 = zext i1 %t359 to i32 %t361 = icmp ne i32 %t360, 0 @@ -22200,34 +33360,34 @@ then77: %t389 = load ptr, ptr %t388 %t390 = call ptr @fn_emit_expr(ptr %t389) store ptr %t390, ptr %t391 - call void @fn_emit(ptr @.str1350) + call void @fn_emit(ptr @.str3183) %t392 = load ptr, ptr %t373 %t393 = getelementptr inbounds %Cmp_Val, ptr %t392, i32 0, i32 0 %t394 = load ptr, ptr %t393 call void @fn_emit(ptr %t394) - call void @fn_emit(ptr @.str1351) + call void @fn_emit(ptr @.str3184) %t395 = load ptr, ptr %t382 %t396 = getelementptr inbounds %Cmp_Val, ptr %t395, i32 0, i32 0 %t397 = load ptr, ptr %t396 call void @fn_emit(ptr %t397) - call void @fn_emit(ptr @.str1352) + call void @fn_emit(ptr @.str3185) %t398 = load ptr, ptr %t391 %t399 = getelementptr inbounds %Cmp_Val, ptr %t398, i32 0, i32 0 %t400 = load ptr, ptr %t399 call void @fn_emit(ptr %t400) - call void @fn_emit(ptr @.str1353) - %t401 = call ptr @fn_val(ptr @.str1354, ptr @.str1355) + call void @fn_emit(ptr @.str3186) + %t401 = call ptr @fn_val(ptr @.str3187, ptr @.str3188) store ptr %t401, ptr %retval br label %ret ifend79: %t403 = load ptr, ptr %t38 - %t404 = call i32 @fn_str_eq(ptr %t403, ptr @.str1356) + %t404 = call i32 @fn_str_eq(ptr %t403, ptr @.str3189) %t405 = icmp ne i32 %t404, 0 %t406 = zext i1 %t405 to i32 store i32 %t406, ptr %t402 br i1 %t405, label %sc80, label %scend81 sc80: - %t407 = call ptr @fn_find_extern(ptr @.str1357) + %t407 = call ptr @fn_find_extern(ptr @.str3190) %t408 = icmp eq ptr %t407, null %t409 = zext i1 %t408 to i32 %t410 = icmp ne i32 %t409, 0 @@ -22261,20 +33421,20 @@ then82: %t432 = load ptr, ptr %t422 %t433 = getelementptr inbounds %Cmp_Val, ptr %t432, i32 0, i32 0 %t434 = load ptr, ptr %t433 - %t435 = call ptr @fn_str_concat(ptr @.str1358, ptr %t434) - %t436 = call ptr @fn_str_concat(ptr %t435, ptr @.str1359) + %t435 = call ptr @fn_str_concat(ptr @.str3191, ptr %t434) + %t436 = call ptr @fn_str_concat(ptr %t435, ptr @.str3192) %t437 = load ptr, ptr %t431 %t438 = getelementptr inbounds %Cmp_Val, ptr %t437, i32 0, i32 0 %t439 = load ptr, ptr %t438 %t440 = call ptr @fn_str_concat(ptr %t436, ptr %t439) - %t441 = call ptr @fn_str_concat(ptr %t440, ptr @.str1360) + %t441 = call ptr @fn_str_concat(ptr %t440, ptr @.str3193) %t442 = call ptr @fn_emit_bind(ptr %t441) - %t443 = call ptr @fn_val(ptr %t442, ptr @.str1361) + %t443 = call ptr @fn_val(ptr %t442, ptr @.str3194) store ptr %t443, ptr %retval br label %ret ifend84: %t444 = load ptr, ptr %t38 - %t445 = call i32 @fn_str_eq(ptr %t444, ptr @.str1362) + %t445 = call i32 @fn_str_eq(ptr %t444, ptr @.str3195) %t446 = icmp ne i32 %t445, 0 br i1 %t446, label %then85, label %ifend87 then85: @@ -22284,7 +33444,7 @@ then85: br label %ret ifend87: %t449 = load ptr, ptr %t38 - %t450 = call i32 @fn_str_eq(ptr %t449, ptr @.str1363) + %t450 = call i32 @fn_str_eq(ptr %t449, ptr @.str3196) %t451 = icmp ne i32 %t450, 0 br i1 %t451, label %then88, label %ifend90 then88: @@ -22294,7 +33454,7 @@ then88: br label %ret ifend90: %t454 = load ptr, ptr %t38 - %t455 = call i32 @fn_str_eq(ptr %t454, ptr @.str1364) + %t455 = call i32 @fn_str_eq(ptr %t454, ptr @.str3197) %t456 = icmp ne i32 %t455, 0 br i1 %t456, label %then91, label %ifend93 then91: @@ -22311,7 +33471,7 @@ then91: %t467 = getelementptr inbounds %Cmp_Val, ptr %t466, i32 0, i32 1 %t468 = load ptr, ptr %t467 %t469 = call ptr @fn_llty(ptr %t468) - %t470 = call i32 @fn_str_eq(ptr %t469, ptr @.str1365) + %t470 = call i32 @fn_str_eq(ptr %t469, ptr @.str3198) %t471 = icmp ne i32 %t470, 0 br i1 %t471, label %then94, label %ifend96 then94: @@ -22323,15 +33483,15 @@ ifend96: %t473 = load ptr, ptr %t465 %t474 = getelementptr inbounds %Cmp_Val, ptr %t473, i32 0, i32 0 %t475 = load ptr, ptr %t474 - %t476 = call ptr @fn_str_concat(ptr @.str1366, ptr %t475) - %t477 = call ptr @fn_str_concat(ptr %t476, ptr @.str1367) + %t476 = call ptr @fn_str_concat(ptr @.str3199, ptr %t475) + %t477 = call ptr @fn_str_concat(ptr %t476, ptr @.str3200) %t478 = call ptr @fn_emit_bind(ptr %t477) - %t479 = call ptr @fn_val(ptr %t478, ptr @.str1368) + %t479 = call ptr @fn_val(ptr %t478, ptr @.str3201) store ptr %t479, ptr %retval br label %ret ifend93: %t480 = load ptr, ptr %t38 - %t481 = call i32 @fn_str_eq(ptr %t480, ptr @.str1369) + %t481 = call i32 @fn_str_eq(ptr %t480, ptr @.str3202) %t482 = icmp ne i32 %t481, 0 br i1 %t482, label %then97, label %ifend99 then97: @@ -22348,32 +33508,32 @@ then97: %t493 = getelementptr inbounds %Cmp_Val, ptr %t492, i32 0, i32 1 %t494 = load ptr, ptr %t493 %t495 = call ptr @fn_llty(ptr %t494) - %t496 = call i32 @fn_str_eq(ptr %t495, ptr @.str1370) + %t496 = call i32 @fn_str_eq(ptr %t495, ptr @.str3203) %t497 = icmp ne i32 %t496, 0 br i1 %t497, label %then100, label %else101 then100: %t498 = load ptr, ptr %t491 %t499 = getelementptr inbounds %Cmp_Val, ptr %t498, i32 0, i32 0 %t500 = load ptr, ptr %t499 - %t501 = call ptr @fn_str_concat(ptr %t500, ptr @.str1372) - %t502 = call ptr @fn_str_concat(ptr @.str1371, ptr %t501) + %t501 = call ptr @fn_str_concat(ptr %t500, ptr @.str3205) + %t502 = call ptr @fn_str_concat(ptr @.str3204, ptr %t501) call void @fn_emit(ptr %t502) br label %ifend102 else101: %t503 = load ptr, ptr %t491 %t504 = getelementptr inbounds %Cmp_Val, ptr %t503, i32 0, i32 0 %t505 = load ptr, ptr %t504 - %t506 = call ptr @fn_str_concat(ptr %t505, ptr @.str1374) - %t507 = call ptr @fn_str_concat(ptr @.str1373, ptr %t506) + %t506 = call ptr @fn_str_concat(ptr %t505, ptr @.str3207) + %t507 = call ptr @fn_str_concat(ptr @.str3206, ptr %t506) call void @fn_emit(ptr %t507) br label %ifend102 ifend102: - %t508 = call ptr @fn_val(ptr @.str1375, ptr @.str1376) + %t508 = call ptr @fn_val(ptr @.str3208, ptr @.str3209) store ptr %t508, ptr %retval br label %ret ifend99: %t509 = load ptr, ptr %t38 - %t510 = call i32 @fn_str_eq(ptr %t509, ptr @.str1377) + %t510 = call i32 @fn_str_eq(ptr %t509, ptr @.str3210) %t511 = icmp ne i32 %t510, 0 br i1 %t511, label %then103, label %ifend105 then103: @@ -22389,20 +33549,20 @@ then103: %t521 = load ptr, ptr %t520 %t522 = getelementptr inbounds %Cmp_Val, ptr %t521, i32 0, i32 0 %t523 = load ptr, ptr %t522 - %t524 = call ptr @fn_str_concat(ptr @.str1378, ptr %t523) - %t525 = call ptr @fn_str_concat(ptr %t524, ptr @.str1379) + %t524 = call ptr @fn_str_concat(ptr @.str3211, ptr %t523) + %t525 = call ptr @fn_str_concat(ptr %t524, ptr @.str3212) %t526 = call ptr @fn_emit_bind(ptr %t525) store ptr %t526, ptr %t527 %t528 = load ptr, ptr %t527 - %t529 = call ptr @fn_str_concat(ptr @.str1380, ptr %t528) - %t530 = call ptr @fn_str_concat(ptr %t529, ptr @.str1381) + %t529 = call ptr @fn_str_concat(ptr @.str3213, ptr %t528) + %t530 = call ptr @fn_str_concat(ptr %t529, ptr @.str3214) %t531 = call ptr @fn_emit_bind(ptr %t530) - %t532 = call ptr @fn_val(ptr %t531, ptr @.str1382) + %t532 = call ptr @fn_val(ptr %t531, ptr @.str3215) store ptr %t532, ptr %retval br label %ret ifend105: %t533 = load ptr, ptr %t38 - %t534 = call i32 @fn_str_eq(ptr %t533, ptr @.str1383) + %t534 = call i32 @fn_str_eq(ptr %t533, ptr @.str3216) %t535 = icmp ne i32 %t534, 0 br i1 %t535, label %then106, label %ifend108 then106: @@ -22418,25 +33578,25 @@ then106: %t545 = load ptr, ptr %t544 %t546 = getelementptr inbounds %Cmp_Val, ptr %t545, i32 0, i32 0 %t547 = load ptr, ptr %t546 - %t548 = call ptr @fn_str_concat(ptr @.str1384, ptr %t547) - %t549 = call ptr @fn_str_concat(ptr %t548, ptr @.str1385) + %t548 = call ptr @fn_str_concat(ptr @.str3217, ptr %t547) + %t549 = call ptr @fn_str_concat(ptr %t548, ptr @.str3218) %t550 = call ptr @fn_emit_bind(ptr %t549) store ptr %t550, ptr %t551 %t552 = load ptr, ptr %t551 - %t553 = call ptr @fn_str_concat(ptr @.str1386, ptr %t552) - %t554 = call ptr @fn_str_concat(ptr %t553, ptr @.str1387) + %t553 = call ptr @fn_str_concat(ptr @.str3219, ptr %t552) + %t554 = call ptr @fn_str_concat(ptr %t553, ptr @.str3220) %t555 = call ptr @fn_emit_bind(ptr %t554) store ptr %t555, ptr %t556 %t557 = load ptr, ptr %t556 - %t558 = call ptr @fn_str_concat(ptr @.str1388, ptr %t557) - %t559 = call ptr @fn_str_concat(ptr %t558, ptr @.str1389) + %t558 = call ptr @fn_str_concat(ptr @.str3221, ptr %t557) + %t559 = call ptr @fn_str_concat(ptr %t558, ptr @.str3222) %t560 = call ptr @fn_emit_bind(ptr %t559) - %t561 = call ptr @fn_val(ptr %t560, ptr @.str1390) + %t561 = call ptr @fn_val(ptr %t560, ptr @.str3223) store ptr %t561, ptr %retval br label %ret ifend108: %t562 = load ptr, ptr %t38 - %t563 = call i32 @fn_str_eq(ptr %t562, ptr @.str1391) + %t563 = call i32 @fn_str_eq(ptr %t562, ptr @.str3224) %t564 = icmp ne i32 %t563, 0 br i1 %t564, label %then109, label %ifend111 then109: @@ -22452,15 +33612,15 @@ then109: %t574 = load ptr, ptr %t573 %t575 = getelementptr inbounds %Cmp_Val, ptr %t574, i32 0, i32 0 %t576 = load ptr, ptr %t575 - %t577 = call ptr @fn_str_concat(ptr @.str1392, ptr %t576) - %t578 = call ptr @fn_str_concat(ptr %t577, ptr @.str1393) + %t577 = call ptr @fn_str_concat(ptr @.str3225, ptr %t576) + %t578 = call ptr @fn_str_concat(ptr %t577, ptr @.str3226) %t579 = call ptr @fn_emit_bind(ptr %t578) - %t580 = call ptr @fn_val(ptr %t579, ptr @.str1394) + %t580 = call ptr @fn_val(ptr %t579, ptr @.str3227) store ptr %t580, ptr %retval br label %ret ifend111: %t581 = load ptr, ptr %t38 - %t582 = call i32 @fn_str_eq(ptr %t581, ptr @.str1395) + %t582 = call i32 @fn_str_eq(ptr %t581, ptr @.str3228) %t583 = icmp ne i32 %t582, 0 br i1 %t583, label %then112, label %ifend114 then112: @@ -22476,15 +33636,15 @@ then112: %t593 = load ptr, ptr %t592 %t594 = getelementptr inbounds %Cmp_Val, ptr %t593, i32 0, i32 0 %t595 = load ptr, ptr %t594 - %t596 = call ptr @fn_str_concat(ptr @.str1396, ptr %t595) - %t597 = call ptr @fn_str_concat(ptr %t596, ptr @.str1397) + %t596 = call ptr @fn_str_concat(ptr @.str3229, ptr %t595) + %t597 = call ptr @fn_str_concat(ptr %t596, ptr @.str3230) %t598 = call ptr @fn_emit_bind(ptr %t597) - %t599 = call ptr @fn_val(ptr %t598, ptr @.str1398) + %t599 = call ptr @fn_val(ptr %t598, ptr @.str3231) store ptr %t599, ptr %retval br label %ret ifend114: %t600 = load ptr, ptr %t38 - %t601 = call i32 @fn_str_eq(ptr %t600, ptr @.str1399) + %t601 = call i32 @fn_str_eq(ptr %t600, ptr @.str3232) %t602 = icmp ne i32 %t601, 0 br i1 %t602, label %then115, label %ifend117 then115: @@ -22500,15 +33660,15 @@ then115: %t612 = load ptr, ptr %t611 %t613 = getelementptr inbounds %Cmp_Val, ptr %t612, i32 0, i32 0 %t614 = load ptr, ptr %t613 - %t615 = call ptr @fn_str_concat(ptr @.str1400, ptr %t614) - %t616 = call ptr @fn_str_concat(ptr %t615, ptr @.str1401) + %t615 = call ptr @fn_str_concat(ptr @.str3233, ptr %t614) + %t616 = call ptr @fn_str_concat(ptr %t615, ptr @.str3234) %t617 = call ptr @fn_emit_bind(ptr %t616) - %t618 = call ptr @fn_val(ptr %t617, ptr @.str1402) + %t618 = call ptr @fn_val(ptr %t617, ptr @.str3235) store ptr %t618, ptr %retval br label %ret ifend117: %t619 = load ptr, ptr %t38 - %t620 = call i32 @fn_str_eq(ptr %t619, ptr @.str1403) + %t620 = call i32 @fn_str_eq(ptr %t619, ptr @.str3236) %t621 = icmp ne i32 %t620, 0 br i1 %t621, label %then118, label %ifend120 then118: @@ -22533,20 +33693,20 @@ then118: %t640 = load ptr, ptr %t630 %t641 = getelementptr inbounds %Cmp_Val, ptr %t640, i32 0, i32 0 %t642 = load ptr, ptr %t641 - %t643 = call ptr @fn_str_concat(ptr @.str1404, ptr %t642) - %t644 = call ptr @fn_str_concat(ptr %t643, ptr @.str1405) + %t643 = call ptr @fn_str_concat(ptr @.str3237, ptr %t642) + %t644 = call ptr @fn_str_concat(ptr %t643, ptr @.str3238) %t645 = load ptr, ptr %t639 %t646 = getelementptr inbounds %Cmp_Val, ptr %t645, i32 0, i32 0 %t647 = load ptr, ptr %t646 %t648 = call ptr @fn_str_concat(ptr %t644, ptr %t647) - %t649 = call ptr @fn_str_concat(ptr %t648, ptr @.str1406) + %t649 = call ptr @fn_str_concat(ptr %t648, ptr @.str3239) %t650 = call ptr @fn_emit_bind(ptr %t649) - %t651 = call ptr @fn_val(ptr %t650, ptr @.str1407) + %t651 = call ptr @fn_val(ptr %t650, ptr @.str3240) store ptr %t651, ptr %retval br label %ret ifend120: %t652 = load ptr, ptr %t38 - %t653 = call i32 @fn_str_eq(ptr %t652, ptr @.str1408) + %t653 = call i32 @fn_str_eq(ptr %t652, ptr @.str3241) %t654 = icmp ne i32 %t653, 0 br i1 %t654, label %then121, label %ifend123 then121: @@ -22580,30 +33740,30 @@ then121: %t682 = load ptr, ptr %t663 %t683 = getelementptr inbounds %Cmp_Val, ptr %t682, i32 0, i32 0 %t684 = load ptr, ptr %t683 - %t685 = call ptr @fn_str_concat(ptr @.str1409, ptr %t684) - %t686 = call ptr @fn_str_concat(ptr %t685, ptr @.str1410) + %t685 = call ptr @fn_str_concat(ptr @.str3242, ptr %t684) + %t686 = call ptr @fn_str_concat(ptr %t685, ptr @.str3243) %t687 = load ptr, ptr %t672 %t688 = getelementptr inbounds %Cmp_Val, ptr %t687, i32 0, i32 0 %t689 = load ptr, ptr %t688 %t690 = call ptr @fn_str_concat(ptr %t686, ptr %t689) - %t691 = call ptr @fn_str_concat(ptr %t690, ptr @.str1411) + %t691 = call ptr @fn_str_concat(ptr %t690, ptr @.str3244) %t692 = load ptr, ptr %t681 %t693 = getelementptr inbounds %Cmp_Val, ptr %t692, i32 0, i32 0 %t694 = load ptr, ptr %t693 %t695 = call ptr @fn_str_concat(ptr %t691, ptr %t694) - %t696 = call ptr @fn_str_concat(ptr %t695, ptr @.str1412) + %t696 = call ptr @fn_str_concat(ptr %t695, ptr @.str3245) %t697 = call ptr @fn_emit_bind(ptr %t696) store ptr %t697, ptr %t698 %t699 = load ptr, ptr %t698 - %t700 = call ptr @fn_str_concat(ptr @.str1413, ptr %t699) - %t701 = call ptr @fn_str_concat(ptr %t700, ptr @.str1414) + %t700 = call ptr @fn_str_concat(ptr @.str3246, ptr %t699) + %t701 = call ptr @fn_str_concat(ptr %t700, ptr @.str3247) %t702 = call ptr @fn_emit_bind(ptr %t701) - %t703 = call ptr @fn_val(ptr %t702, ptr @.str1415) + %t703 = call ptr @fn_val(ptr %t702, ptr @.str3248) store ptr %t703, ptr %retval br label %ret ifend123: %t704 = load ptr, ptr %t38 - %t705 = call i32 @fn_str_eq(ptr %t704, ptr @.str1416) + %t705 = call i32 @fn_str_eq(ptr %t704, ptr @.str3249) %t706 = icmp ne i32 %t705, 0 br i1 %t706, label %then124, label %ifend126 then124: @@ -22646,35 +33806,35 @@ then124: %t743 = load ptr, ptr %t742 %t744 = getelementptr inbounds %Cmp_Val, ptr %t743, i32 0, i32 0 %t745 = load ptr, ptr %t744 - %t746 = call ptr @fn_str_concat(ptr @.str1417, ptr %t745) - %t747 = call ptr @fn_str_concat(ptr %t746, ptr @.str1418) + %t746 = call ptr @fn_str_concat(ptr @.str3250, ptr %t745) + %t747 = call ptr @fn_str_concat(ptr %t746, ptr @.str3251) %t748 = call ptr @fn_emit_bind(ptr %t747) store ptr %t748, ptr %t749 - call void @fn_emit(ptr @.str1419) + call void @fn_emit(ptr @.str3252) %t750 = load ptr, ptr %t715 %t751 = getelementptr inbounds %Cmp_Val, ptr %t750, i32 0, i32 0 %t752 = load ptr, ptr %t751 call void @fn_emit(ptr %t752) - call void @fn_emit(ptr @.str1420) + call void @fn_emit(ptr @.str3253) %t753 = load ptr, ptr %t724 %t754 = getelementptr inbounds %Cmp_Val, ptr %t753, i32 0, i32 0 %t755 = load ptr, ptr %t754 call void @fn_emit(ptr %t755) - call void @fn_emit(ptr @.str1421) + call void @fn_emit(ptr @.str3254) %t756 = load ptr, ptr %t733 %t757 = getelementptr inbounds %Cmp_Val, ptr %t756, i32 0, i32 0 %t758 = load ptr, ptr %t757 call void @fn_emit(ptr %t758) - call void @fn_emit(ptr @.str1422) + call void @fn_emit(ptr @.str3255) %t759 = load ptr, ptr %t749 call void @fn_emit(ptr %t759) - call void @fn_emit(ptr @.str1423) - %t760 = call ptr @fn_val(ptr @.str1424, ptr @.str1425) + call void @fn_emit(ptr @.str3256) + %t760 = call ptr @fn_val(ptr @.str3257, ptr @.str3258) store ptr %t760, ptr %retval br label %ret ifend126: %t761 = load ptr, ptr %t38 - %t762 = call i32 @fn_str_eq(ptr %t761, ptr @.str1426) + %t762 = call i32 @fn_str_eq(ptr %t761, ptr @.str3259) %t763 = icmp ne i32 %t762, 0 br i1 %t763, label %then127, label %ifend129 then127: @@ -22699,30 +33859,30 @@ then127: %t782 = load ptr, ptr %t772 %t783 = getelementptr inbounds %Cmp_Val, ptr %t782, i32 0, i32 0 %t784 = load ptr, ptr %t783 - %t785 = call ptr @fn_str_concat(ptr @.str1427, ptr %t784) - %t786 = call ptr @fn_str_concat(ptr %t785, ptr @.str1428) + %t785 = call ptr @fn_str_concat(ptr @.str3260, ptr %t784) + %t786 = call ptr @fn_str_concat(ptr %t785, ptr @.str3261) %t787 = load ptr, ptr %t781 %t788 = getelementptr inbounds %Cmp_Val, ptr %t787, i32 0, i32 0 %t789 = load ptr, ptr %t788 %t790 = call ptr @fn_str_concat(ptr %t786, ptr %t789) - %t791 = call ptr @fn_str_concat(ptr %t790, ptr @.str1429) + %t791 = call ptr @fn_str_concat(ptr %t790, ptr @.str3262) %t792 = call ptr @fn_emit_bind(ptr %t791) - %t793 = call ptr @fn_val(ptr %t792, ptr @.str1430) + %t793 = call ptr @fn_val(ptr %t792, ptr @.str3263) store ptr %t793, ptr %retval br label %ret ifend129: %t794 = load ptr, ptr %t38 - %t795 = call i32 @fn_str_eq(ptr %t794, ptr @.str1431) + %t795 = call i32 @fn_str_eq(ptr %t794, ptr @.str3264) %t796 = icmp ne i32 %t795, 0 br i1 %t796, label %then130, label %ifend132 then130: - %t797 = call ptr @fn_emit_bind(ptr @.str1432) - %t798 = call ptr @fn_val(ptr %t797, ptr @.str1433) + %t797 = call ptr @fn_emit_bind(ptr @.str3265) + %t798 = call ptr @fn_val(ptr %t797, ptr @.str3266) store ptr %t798, ptr %retval br label %ret ifend132: %t799 = load ptr, ptr %t38 - %t800 = call i32 @fn_str_eq(ptr %t799, ptr @.str1434) + %t800 = call i32 @fn_str_eq(ptr %t799, ptr @.str3267) %t801 = icmp ne i32 %t800, 0 br i1 %t801, label %then133, label %ifend135 then133: @@ -22738,15 +33898,15 @@ then133: %t811 = load ptr, ptr %t810 %t812 = getelementptr inbounds %Cmp_Val, ptr %t811, i32 0, i32 0 %t813 = load ptr, ptr %t812 - %t814 = call ptr @fn_str_concat(ptr @.str1435, ptr %t813) - %t815 = call ptr @fn_str_concat(ptr %t814, ptr @.str1436) + %t814 = call ptr @fn_str_concat(ptr @.str3268, ptr %t813) + %t815 = call ptr @fn_str_concat(ptr %t814, ptr @.str3269) %t816 = call ptr @fn_emit_bind(ptr %t815) - %t817 = call ptr @fn_val(ptr %t816, ptr @.str1437) + %t817 = call ptr @fn_val(ptr %t816, ptr @.str3270) store ptr %t817, ptr %retval br label %ret ifend135: %t818 = load ptr, ptr %t38 - %t819 = call i32 @fn_str_eq(ptr %t818, ptr @.str1438) + %t819 = call i32 @fn_str_eq(ptr %t818, ptr @.str3271) %t820 = icmp ne i32 %t819, 0 br i1 %t820, label %then136, label %ifend138 then136: @@ -22762,15 +33922,15 @@ then136: %t830 = load ptr, ptr %t829 %t831 = getelementptr inbounds %Cmp_Val, ptr %t830, i32 0, i32 0 %t832 = load ptr, ptr %t831 - %t833 = call ptr @fn_str_concat(ptr @.str1439, ptr %t832) - %t834 = call ptr @fn_str_concat(ptr %t833, ptr @.str1440) + %t833 = call ptr @fn_str_concat(ptr @.str3272, ptr %t832) + %t834 = call ptr @fn_str_concat(ptr %t833, ptr @.str3273) %t835 = call ptr @fn_emit_bind(ptr %t834) - %t836 = call ptr @fn_val(ptr %t835, ptr @.str1441) + %t836 = call ptr @fn_val(ptr %t835, ptr @.str3274) store ptr %t836, ptr %retval br label %ret ifend138: %t837 = load ptr, ptr %t38 - %t838 = call i32 @fn_str_eq(ptr %t837, ptr @.str1442) + %t838 = call i32 @fn_str_eq(ptr %t837, ptr @.str3275) %t839 = icmp ne i32 %t838, 0 br i1 %t839, label %then139, label %ifend141 then139: @@ -22795,20 +33955,20 @@ then139: %t858 = load ptr, ptr %t848 %t859 = getelementptr inbounds %Cmp_Val, ptr %t858, i32 0, i32 0 %t860 = load ptr, ptr %t859 - %t861 = call ptr @fn_str_concat(ptr @.str1443, ptr %t860) - %t862 = call ptr @fn_str_concat(ptr %t861, ptr @.str1444) + %t861 = call ptr @fn_str_concat(ptr @.str3276, ptr %t860) + %t862 = call ptr @fn_str_concat(ptr %t861, ptr @.str3277) %t863 = load ptr, ptr %t857 %t864 = getelementptr inbounds %Cmp_Val, ptr %t863, i32 0, i32 0 %t865 = load ptr, ptr %t864 %t866 = call ptr @fn_str_concat(ptr %t862, ptr %t865) - %t867 = call ptr @fn_str_concat(ptr %t866, ptr @.str1445) + %t867 = call ptr @fn_str_concat(ptr %t866, ptr @.str3278) %t868 = call ptr @fn_emit_bind(ptr %t867) - %t869 = call ptr @fn_val(ptr %t868, ptr @.str1446) + %t869 = call ptr @fn_val(ptr %t868, ptr @.str3279) store ptr %t869, ptr %retval br label %ret ifend141: %t870 = load ptr, ptr %t38 - %t871 = call i32 @fn_str_eq(ptr %t870, ptr @.str1447) + %t871 = call i32 @fn_str_eq(ptr %t870, ptr @.str3280) %t872 = icmp ne i32 %t871, 0 br i1 %t872, label %then142, label %ifend144 then142: @@ -22833,20 +33993,20 @@ then142: %t891 = load ptr, ptr %t881 %t892 = getelementptr inbounds %Cmp_Val, ptr %t891, i32 0, i32 0 %t893 = load ptr, ptr %t892 - %t894 = call ptr @fn_str_concat(ptr @.str1448, ptr %t893) - %t895 = call ptr @fn_str_concat(ptr %t894, ptr @.str1449) + %t894 = call ptr @fn_str_concat(ptr @.str3281, ptr %t893) + %t895 = call ptr @fn_str_concat(ptr %t894, ptr @.str3282) %t896 = load ptr, ptr %t890 %t897 = getelementptr inbounds %Cmp_Val, ptr %t896, i32 0, i32 0 %t898 = load ptr, ptr %t897 %t899 = call ptr @fn_str_concat(ptr %t895, ptr %t898) - %t900 = call ptr @fn_str_concat(ptr %t899, ptr @.str1450) + %t900 = call ptr @fn_str_concat(ptr %t899, ptr @.str3283) %t901 = call ptr @fn_emit_bind(ptr %t900) - %t902 = call ptr @fn_val(ptr %t901, ptr @.str1451) + %t902 = call ptr @fn_val(ptr %t901, ptr @.str3284) store ptr %t902, ptr %retval br label %ret ifend144: %t903 = load ptr, ptr %t38 - %t904 = call i32 @fn_str_eq(ptr %t903, ptr @.str1452) + %t904 = call i32 @fn_str_eq(ptr %t903, ptr @.str3285) %t905 = icmp ne i32 %t904, 0 br i1 %t905, label %then145, label %ifend147 then145: @@ -22868,23 +34028,23 @@ then145: %t921 = load ptr, ptr %t920 %t922 = call ptr @fn_emit_expr(ptr %t921) store ptr %t922, ptr %t923 - call void @fn_emit(ptr @.str1453) + call void @fn_emit(ptr @.str3286) %t924 = load ptr, ptr %t914 %t925 = getelementptr inbounds %Cmp_Val, ptr %t924, i32 0, i32 0 %t926 = load ptr, ptr %t925 call void @fn_emit(ptr %t926) - call void @fn_emit(ptr @.str1454) + call void @fn_emit(ptr @.str3287) %t927 = load ptr, ptr %t923 %t928 = getelementptr inbounds %Cmp_Val, ptr %t927, i32 0, i32 0 %t929 = load ptr, ptr %t928 call void @fn_emit(ptr %t929) - call void @fn_emit(ptr @.str1455) - %t930 = call ptr @fn_val(ptr @.str1456, ptr @.str1457) + call void @fn_emit(ptr @.str3288) + %t930 = call ptr @fn_val(ptr @.str3289, ptr @.str3290) store ptr %t930, ptr %retval br label %ret ifend147: %t931 = load ptr, ptr %t38 - %t932 = call i32 @fn_str_eq(ptr %t931, ptr @.str1458) + %t932 = call i32 @fn_str_eq(ptr %t931, ptr @.str3291) %t933 = icmp ne i32 %t932, 0 br i1 %t933, label %then148, label %ifend150 then148: @@ -22906,23 +34066,23 @@ then148: %t949 = load ptr, ptr %t948 %t950 = call ptr @fn_emit_expr(ptr %t949) store ptr %t950, ptr %t951 - call void @fn_emit(ptr @.str1459) + call void @fn_emit(ptr @.str3292) %t952 = load ptr, ptr %t942 %t953 = getelementptr inbounds %Cmp_Val, ptr %t952, i32 0, i32 0 %t954 = load ptr, ptr %t953 call void @fn_emit(ptr %t954) - call void @fn_emit(ptr @.str1460) + call void @fn_emit(ptr @.str3293) %t955 = load ptr, ptr %t951 %t956 = getelementptr inbounds %Cmp_Val, ptr %t955, i32 0, i32 0 %t957 = load ptr, ptr %t956 call void @fn_emit(ptr %t957) - call void @fn_emit(ptr @.str1461) - %t958 = call ptr @fn_val(ptr @.str1462, ptr @.str1463) + call void @fn_emit(ptr @.str3294) + %t958 = call ptr @fn_val(ptr @.str3295, ptr @.str3296) store ptr %t958, ptr %retval br label %ret ifend150: %t959 = load ptr, ptr %t38 - %t960 = call i32 @fn_str_eq(ptr %t959, ptr @.str1464) + %t960 = call i32 @fn_str_eq(ptr %t959, ptr @.str3297) %t961 = icmp ne i32 %t960, 0 br i1 %t961, label %then151, label %ifend153 then151: @@ -22938,10 +34098,10 @@ then151: %t971 = load ptr, ptr %t970 %t972 = getelementptr inbounds %Cmp_Val, ptr %t971, i32 0, i32 0 %t973 = load ptr, ptr %t972 - %t974 = call ptr @fn_str_concat(ptr @.str1465, ptr %t973) - %t975 = call ptr @fn_str_concat(ptr %t974, ptr @.str1466) + %t974 = call ptr @fn_str_concat(ptr @.str3298, ptr %t973) + %t975 = call ptr @fn_str_concat(ptr %t974, ptr @.str3299) %t976 = call ptr @fn_emit_bind(ptr %t975) - %t977 = call ptr @fn_val(ptr %t976, ptr @.str1467) + %t977 = call ptr @fn_val(ptr %t976, ptr @.str3300) store ptr %t977, ptr %retval br label %ret ifend153: @@ -23105,10 +34265,10 @@ wend168: %t1088 = load ptr, ptr %t1087 %t1089 = call ptr @fn_llty(ptr %t1088) store ptr %t1089, ptr %t1090 - call void @fn_emit(ptr @.str1468) - store ptr @.str1469, ptr %t1091 + call void @fn_emit(ptr @.str3301) + store ptr @.str3302, ptr %t1091 %t1092 = load ptr, ptr %t1090 - %t1093 = call i32 @fn_str_eq(ptr %t1092, ptr @.str1470) + %t1093 = call i32 @fn_str_eq(ptr %t1092, ptr @.str3303) %t1094 = icmp eq i32 %t1093, 0 %t1095 = zext i1 %t1094 to i32 %t1096 = icmp ne i32 %t1095, 0 @@ -23118,20 +34278,20 @@ then173: store ptr %t1097, ptr %t1091 %t1098 = load ptr, ptr %t1091 call void @fn_emit(ptr %t1098) - call void @fn_emit(ptr @.str1471) + call void @fn_emit(ptr @.str3304) br label %ifend175 ifend175: - call void @fn_emit(ptr @.str1472) + call void @fn_emit(ptr @.str3305) %t1099 = load ptr, ptr %t1090 call void @fn_emit(ptr %t1099) - call void @fn_emit(ptr @.str1473) + call void @fn_emit(ptr @.str3306) %t1100 = load ptr, ptr %t998 %t1101 = getelementptr inbounds %Cmp_Node, ptr %t1100, i32 0, i32 4 %t1102 = load ptr, ptr %t1101 %t1103 = getelementptr inbounds %Cmp_Node, ptr %t1102, i32 0, i32 1 %t1104 = load ptr, ptr %t1103 call void @fn_emit(ptr %t1104) - call void @fn_emit(ptr @.str1474) + call void @fn_emit(ptr @.str3307) store i32 0, ptr %t1020 br label %wcond176 wcond176: @@ -23150,7 +34310,7 @@ wbody177: %t1115 = icmp ne i32 %t1114, 0 br i1 %t1115, label %then179, label %ifend181 then179: - call void @fn_emit(ptr @.str1475) + call void @fn_emit(ptr @.str3308) br label %ifend181 ifend181: %t1116 = load ptr, ptr %t1019 @@ -23161,7 +34321,7 @@ ifend181: %t1121 = load ptr, ptr %t1120 %t1122 = call ptr @fn_llty(ptr %t1121) call void @fn_emit(ptr %t1122) - call void @fn_emit(ptr @.str1476) + call void @fn_emit(ptr @.str3309) %t1123 = load ptr, ptr %t1012 %t1124 = getelementptr inbounds %LSlice, ptr %t1123, i32 0, i32 0 %t1125 = load ptr, ptr %t1124 @@ -23174,7 +34334,7 @@ ifend181: store i32 %t1130, ptr %t1020 br label %wcond176 wend178: - call void @fn_emit(ptr @.str1477) + call void @fn_emit(ptr @.str3310) %t1131 = load ptr, ptr %t1091 %t1132 = load ptr, ptr %t998 %t1133 = getelementptr inbounds %Cmp_Node, ptr %t1132, i32 0, i32 3 @@ -23195,7 +34355,7 @@ ifend165: br i1 %t1144, label %then182, label %ifend184 then182: %t1145 = load ptr, ptr %t38 - %t1146 = call ptr @fn_str_concat(ptr @.str1478, ptr %t1145) + %t1146 = call ptr @fn_str_concat(ptr @.str3311, ptr %t1145) store ptr %t1146, ptr %t1147 %t1148 = load ptr, ptr %t1147 %t1149 = call ptr @fn_find_fn(ptr %t1148) @@ -23207,7 +34367,7 @@ then182: br i1 %t1153, label %then185, label %ifend187 then185: %t1154 = load ptr, ptr %t38 - %t1155 = call ptr @fn_str_concat(ptr @.str1479, ptr %t1154) + %t1155 = call ptr @fn_str_concat(ptr @.str3312, ptr %t1154) call void @fn_perr(ptr %t1155) br label %ifend187 ifend187: @@ -23333,10 +34493,10 @@ wend190: %t1242 = load ptr, ptr %t1241 %t1243 = call ptr @fn_llty(ptr %t1242) store ptr %t1243, ptr %t1244 - call void @fn_emit(ptr @.str1480) - store ptr @.str1481, ptr %t1245 + call void @fn_emit(ptr @.str3313) + store ptr @.str3314, ptr %t1245 %t1246 = load ptr, ptr %t1244 - %t1247 = call i32 @fn_str_eq(ptr %t1246, ptr @.str1482) + %t1247 = call i32 @fn_str_eq(ptr %t1246, ptr @.str3315) %t1248 = icmp eq i32 %t1247, 0 %t1249 = zext i1 %t1248 to i32 %t1250 = icmp ne i32 %t1249, 0 @@ -23346,16 +34506,16 @@ then195: store ptr %t1251, ptr %t1245 %t1252 = load ptr, ptr %t1245 call void @fn_emit(ptr %t1252) - call void @fn_emit(ptr @.str1483) + call void @fn_emit(ptr @.str3316) br label %ifend197 ifend197: - call void @fn_emit(ptr @.str1484) + call void @fn_emit(ptr @.str3317) %t1253 = load ptr, ptr %t1244 call void @fn_emit(ptr %t1253) - call void @fn_emit(ptr @.str1485) + call void @fn_emit(ptr @.str3318) %t1254 = load ptr, ptr %t1140 call void @fn_emit(ptr %t1254) - call void @fn_emit(ptr @.str1486) + call void @fn_emit(ptr @.str3319) store i32 0, ptr %t1174 br label %wcond198 wcond198: @@ -23374,7 +34534,7 @@ wbody199: %t1265 = icmp ne i32 %t1264, 0 br i1 %t1265, label %then201, label %ifend203 then201: - call void @fn_emit(ptr @.str1487) + call void @fn_emit(ptr @.str3320) br label %ifend203 ifend203: %t1266 = load ptr, ptr %t1173 @@ -23385,7 +34545,7 @@ ifend203: %t1271 = load ptr, ptr %t1270 %t1272 = call ptr @fn_llty(ptr %t1271) call void @fn_emit(ptr %t1272) - call void @fn_emit(ptr @.str1488) + call void @fn_emit(ptr @.str3321) %t1273 = load ptr, ptr %t1166 %t1274 = getelementptr inbounds %LSlice, ptr %t1273, i32 0, i32 0 %t1275 = load ptr, ptr %t1274 @@ -23398,7 +34558,7 @@ ifend203: store i32 %t1280, ptr %t1174 br label %wcond198 wend200: - call void @fn_emit(ptr @.str1489) + call void @fn_emit(ptr @.str3322) %t1281 = load ptr, ptr %t1245 %t1282 = load ptr, ptr %t1138 %t1283 = getelementptr inbounds %Cmp_Node, ptr %t1282, i32 0, i32 3 @@ -23437,7 +34597,7 @@ entry: %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - %t5 = call ptr @fn_val(ptr @.str1490, ptr @.str1491) + %t5 = call ptr @fn_val(ptr @.str3323, ptr @.str3324) store ptr %t5, ptr %retval br label %ret ifend2: @@ -23453,7 +34613,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 @.str1492) + %t16 = call ptr @fn_val(ptr %t15, ptr @.str3325) store ptr %t16, ptr %retval br label %ret ifend5: @@ -23469,7 +34629,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 @.str1493) + %t27 = call ptr @fn_val(ptr %t26, ptr @.str3326) store ptr %t27, ptr %retval br label %ret ifend8: @@ -23485,7 +34645,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 @.str1494) + %t38 = call ptr @fn_val(ptr %t37, ptr @.str3327) store ptr %t38, ptr %retval br label %ret ifend11: @@ -23497,7 +34657,7 @@ ifend11: %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then12, label %ifend14 then12: - %t45 = call ptr @fn_val(ptr @.str1495, ptr @.str1496) + %t45 = call ptr @fn_val(ptr @.str3328, ptr @.str3329) store ptr %t45, ptr %retval br label %ret ifend14: @@ -23528,20 +34688,20 @@ then15: %t67 = load ptr, ptr %t56 %t68 = getelementptr inbounds %Cmp_Val, ptr %t67, i32 0, i32 0 %t69 = load ptr, ptr %t68 - %t70 = call ptr @fn_str_concat(ptr @.str1497, ptr %t69) - %t71 = call ptr @fn_str_concat(ptr %t70, ptr @.str1498) + %t70 = call ptr @fn_str_concat(ptr @.str3330, ptr %t69) + %t71 = call ptr @fn_str_concat(ptr %t70, ptr @.str3331) %t72 = load ptr, ptr %t61 %t73 = getelementptr inbounds %Cmp_Val, ptr %t72, i32 0, i32 0 %t74 = load ptr, ptr %t73 %t75 = call ptr @fn_str_concat(ptr %t71, ptr %t74) - %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str1499) + %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str3332) %t77 = load ptr, ptr %t66 %t78 = getelementptr inbounds %Cmp_Val, ptr %t77, i32 0, i32 0 %t79 = load ptr, ptr %t78 %t80 = call ptr @fn_str_concat(ptr %t76, ptr %t79) - %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str1500) + %t81 = call ptr @fn_str_concat(ptr %t80, ptr @.str3333) %t82 = call ptr @fn_emit_bind(ptr %t81) - %t83 = call ptr @fn_val(ptr %t82, ptr @.str1501) + %t83 = call ptr @fn_val(ptr %t82, ptr @.str3334) store ptr %t83, ptr %retval br label %ret ifend17: @@ -23557,7 +34717,7 @@ then18: %t91 = getelementptr inbounds %Cmp_Node, ptr %t90, i32 0, i32 1 %t92 = load ptr, ptr %t91 %t93 = call ptr @fn_emit_str_const(ptr %t92) - %t94 = call ptr @fn_val(ptr %t93, ptr @.str1502) + %t94 = call ptr @fn_val(ptr %t93, ptr @.str3335) store ptr %t94, ptr %retval br label %ret ifend20: @@ -23650,7 +34810,7 @@ then36: %t160 = getelementptr inbounds %Cmp_Node, ptr %t159, i32 0, i32 2 %t161 = load i32, ptr %t160 %t162 = call ptr @fn_itoa(i32 %t161) - %t163 = call ptr @fn_val(ptr %t162, ptr @.str1503) + %t163 = call ptr @fn_val(ptr %t162, ptr @.str3336) store ptr %t163, ptr %retval br label %ret ifend38: @@ -23658,8 +34818,8 @@ ifend38: %t165 = getelementptr inbounds %Cmp_Node, ptr %t164, i32 0, i32 3 %t166 = load ptr, ptr %t165 %t167 = call ptr @fn_llty(ptr %t166) - %t168 = call ptr @fn_str_concat(ptr @.str1504, ptr %t167) - %t169 = call ptr @fn_str_concat(ptr %t168, ptr @.str1505) + %t168 = call ptr @fn_str_concat(ptr @.str3337, ptr %t167) + %t169 = call ptr @fn_str_concat(ptr %t168, ptr @.str3338) %t170 = load ptr, ptr %t0 %t171 = getelementptr inbounds %Cmp_Node, ptr %t170, i32 0, i32 1 %t172 = load ptr, ptr %t171 @@ -23686,14 +34846,14 @@ then39: %t188 = load ptr, ptr %t187 %t189 = call i32 @fn_ui_index_of(ptr %t188) %t190 = call ptr @fn_itoa(i32 %t189) - %t191 = call ptr @fn_val(ptr %t190, ptr @.str1506) + %t191 = call ptr @fn_val(ptr %t190, ptr @.str3339) store ptr %t191, ptr %retval br label %ret ifend41: %t192 = load ptr, ptr %t0 %t193 = getelementptr inbounds %Cmp_Node, ptr %t192, i32 0, i32 1 %t194 = load ptr, ptr %t193 - %t195 = call ptr @fn_str_concat(ptr @.str1507, ptr %t194) + %t195 = call ptr @fn_str_concat(ptr @.str3340, ptr %t194) call void @fn_perr(ptr %t195) br label %ifend29 ifend29: @@ -23720,7 +34880,7 @@ then45: %t212 = load ptr, ptr %t211 %t213 = getelementptr inbounds %Cmp_Node, ptr %t212, i32 0, i32 1 %t214 = load ptr, ptr %t213 - %t215 = call i32 @fn_str_eq(ptr %t214, ptr @.str1508) + %t215 = call i32 @fn_str_eq(ptr %t214, ptr @.str3341) %t216 = icmp ne i32 %t215, 0 br i1 %t216, label %then48, label %ifend50 then48: @@ -23738,13 +34898,13 @@ then51: %t226 = load ptr, ptr %t0 %t227 = getelementptr inbounds %Cmp_Node, ptr %t226, i32 0, i32 1 %t228 = load ptr, ptr %t227 - %t229 = call ptr @fn_str_concat(ptr @.str1509, ptr %t228) + %t229 = call ptr @fn_str_concat(ptr @.str3342, ptr %t228) call void @fn_perr(ptr %t229) br label %ifend53 ifend53: %t230 = load i32, ptr %t221 %t231 = call ptr @fn_itoa(i32 %t230) - %t232 = call ptr @fn_val(ptr %t231, ptr @.str1510) + %t232 = call ptr @fn_val(ptr %t231, ptr @.str3343) store ptr %t232, ptr %retval br label %ret ifend50: @@ -23766,7 +34926,7 @@ ifend50: then54: %t247 = load i32, ptr %t242 %t248 = call ptr @fn_itoa(i32 %t247) - %t249 = call ptr @fn_val(ptr %t248, ptr @.str1511) + %t249 = call ptr @fn_val(ptr %t248, ptr @.str3344) store ptr %t249, ptr %retval br label %ret ifend56: @@ -23827,19 +34987,19 @@ then63: %t288 = call ptr @fn_emit_index_addr(ptr %t287) store ptr %t288, ptr %t289 %t290 = load ptr, ptr @g_g_addr_ty - %t291 = call i32 @fn_str_eq(ptr %t290, ptr @.str1512) + %t291 = call i32 @fn_str_eq(ptr %t290, ptr @.str3345) %t292 = icmp ne i32 %t291, 0 br i1 %t292, label %then66, label %ifend68 then66: %t293 = load ptr, ptr %t289 - %t294 = call ptr @fn_str_concat(ptr @.str1513, ptr %t293) + %t294 = call ptr @fn_str_concat(ptr @.str3346, ptr %t293) %t295 = call ptr @fn_emit_bind(ptr %t294) store ptr %t295, ptr %t296 %t297 = load ptr, ptr %t296 - %t298 = call ptr @fn_str_concat(ptr @.str1514, ptr %t297) - %t299 = call ptr @fn_str_concat(ptr %t298, ptr @.str1515) + %t298 = call ptr @fn_str_concat(ptr @.str3347, ptr %t297) + %t299 = call ptr @fn_str_concat(ptr %t298, ptr @.str3348) %t300 = call ptr @fn_emit_bind(ptr %t299) - %t301 = call ptr @fn_val(ptr %t300, ptr @.str1516) + %t301 = call ptr @fn_val(ptr %t300, ptr @.str3349) store ptr %t301, ptr %retval br label %ret ifend68: @@ -23904,53 +35064,53 @@ then78: %t340 = load ptr, ptr %t0 %t341 = getelementptr inbounds %Cmp_Node, ptr %t340, i32 0, i32 1 %t342 = load ptr, ptr %t341 - %t343 = call i32 @fn_str_eq(ptr %t342, ptr @.str1517) + %t343 = call i32 @fn_str_eq(ptr %t342, ptr @.str3350) %t344 = icmp ne i32 %t343, 0 br i1 %t344, label %then81, label %ifend83 then81: %t345 = load ptr, ptr %t339 %t346 = getelementptr inbounds %Cmp_Val, ptr %t345, i32 0, i32 0 %t347 = load ptr, ptr %t346 - %t348 = call ptr @fn_str_concat(ptr @.str1518, ptr %t347) + %t348 = call ptr @fn_str_concat(ptr @.str3351, ptr %t347) %t349 = call ptr @fn_emit_bind(ptr %t348) - %t350 = call ptr @fn_val(ptr %t349, ptr @.str1519) + %t350 = call ptr @fn_val(ptr %t349, ptr @.str3352) store ptr %t350, ptr %retval br label %ret ifend83: %t351 = load ptr, ptr %t0 %t352 = getelementptr inbounds %Cmp_Node, ptr %t351, i32 0, i32 1 %t353 = load ptr, ptr %t352 - %t354 = call i32 @fn_str_eq(ptr %t353, ptr @.str1520) + %t354 = call i32 @fn_str_eq(ptr %t353, ptr @.str3353) %t355 = icmp ne i32 %t354, 0 br i1 %t355, label %then84, label %ifend86 then84: %t356 = load ptr, ptr %t339 %t357 = getelementptr inbounds %Cmp_Val, ptr %t356, i32 0, i32 0 %t358 = load ptr, ptr %t357 - %t359 = call ptr @fn_str_concat(ptr @.str1521, ptr %t358) - %t360 = call ptr @fn_str_concat(ptr %t359, ptr @.str1522) + %t359 = call ptr @fn_str_concat(ptr @.str3354, ptr %t358) + %t360 = call ptr @fn_str_concat(ptr %t359, ptr @.str3355) %t361 = call ptr @fn_emit_bind(ptr %t360) - %t362 = call ptr @fn_val(ptr %t361, ptr @.str1523) + %t362 = call ptr @fn_val(ptr %t361, ptr @.str3356) store ptr %t362, ptr %retval br label %ret ifend86: %t363 = load ptr, ptr %t339 %t364 = getelementptr inbounds %Cmp_Val, ptr %t363, i32 0, i32 0 %t365 = load ptr, ptr %t364 - %t366 = call ptr @fn_str_concat(ptr @.str1524, ptr %t365) - %t367 = call ptr @fn_str_concat(ptr %t366, ptr @.str1525) + %t366 = call ptr @fn_str_concat(ptr @.str3357, ptr %t365) + %t367 = call ptr @fn_str_concat(ptr %t366, ptr @.str3358) %t368 = call ptr @fn_emit_bind(ptr %t367) store ptr %t368, ptr %t369 %t370 = load ptr, ptr %t369 - %t371 = call ptr @fn_str_concat(ptr @.str1526, ptr %t370) - %t372 = call ptr @fn_str_concat(ptr %t371, ptr @.str1527) + %t371 = call ptr @fn_str_concat(ptr @.str3359, ptr %t370) + %t372 = call ptr @fn_str_concat(ptr %t371, ptr @.str3360) %t373 = call ptr @fn_emit_bind(ptr %t372) - %t374 = call ptr @fn_val(ptr %t373, ptr @.str1528) + %t374 = call ptr @fn_val(ptr %t373, ptr @.str3361) store ptr %t374, ptr %retval br label %ret ifend80: - call void @fn_perr(ptr @.str1529) - %t375 = call ptr @fn_val(ptr @.str1530, ptr @.str1531) + call void @fn_perr(ptr @.str3362) + %t375 = call ptr @fn_val(ptr @.str3363, ptr @.str3364) store ptr %t375, ptr %retval br label %ret ret: @@ -24010,16 +35170,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 @.str1532) + call void @fn_emit(ptr @.str3365) %t3 = load ptr, ptr %t0 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str1533) + call void @fn_emit(ptr @.str3366) %t4 = load ptr, ptr %t1 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str1534) + call void @fn_emit(ptr @.str3367) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str1535) + call void @fn_emit(ptr @.str3368) br label %ret ret: ret void @@ -24043,8 +35203,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 @.str1536, ptr %t5 - store ptr @.str1537, ptr %t6 + store ptr @.str3369, ptr %t5 + store ptr @.str3370, ptr %t6 %t7 = load ptr, ptr %t4 %t8 = getelementptr inbounds %Cmp_Node, ptr %t7, i32 0, i32 0 %t9 = load i32, ptr %t8 @@ -24078,8 +35238,8 @@ then6: %t31 = load ptr, ptr %t4 %t32 = getelementptr inbounds %Cmp_Node, ptr %t31, i32 0, i32 1 %t33 = load ptr, ptr %t32 - %t34 = call ptr @fn_str_concat(ptr @.str1538, ptr %t33) - %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str1539) + %t34 = call ptr @fn_str_concat(ptr @.str3371, ptr %t33) + %t35 = call ptr @fn_str_concat(ptr %t34, ptr @.str3372) %t36 = load ptr, ptr %t0 %t37 = getelementptr inbounds %Cmp_Node, ptr %t36, i32 0, i32 8 %t38 = load i32, ptr %t37 @@ -24118,14 +35278,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_str_concat(ptr @.str1540, ptr %t64) + %t65 = call ptr @fn_str_concat(ptr @.str3373, 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_str_concat(ptr @.str1541, ptr %t68) + %t69 = call ptr @fn_str_concat(ptr @.str3374, ptr %t68) store ptr %t69, ptr %t5 %t70 = load ptr, ptr %t57 %t71 = getelementptr inbounds %Cmp_Node, ptr %t70, i32 0, i32 3 @@ -24165,7 +35325,7 @@ then15: store ptr %t90, ptr %t6 br label %ifend17 else16: - call void @fn_perr(ptr @.str1542) + call void @fn_perr(ptr @.str3375) br label %ifend17 ifend17: br label %ifend14 @@ -24187,55 +35347,55 @@ 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_str_eq(ptr %t105, ptr @.str1543) + %t106 = call i32 @fn_str_eq(ptr %t105, ptr @.str3376) %t107 = icmp eq i32 %t106, 0 %t108 = zext i1 %t107 to i32 %t109 = icmp ne i32 %t108, 0 br i1 %t109, label %then18, label %ifend20 then18: %t110 = load ptr, ptr %t93 - %t111 = call ptr @fn_str_concat(ptr @.str1544, ptr %t110) - %t112 = call ptr @fn_str_concat(ptr %t111, ptr @.str1545) + %t111 = call ptr @fn_str_concat(ptr @.str3377, ptr %t110) + %t112 = call ptr @fn_str_concat(ptr %t111, ptr @.str3378) %t113 = load ptr, ptr %t5 %t114 = call ptr @fn_str_concat(ptr %t112, ptr %t113) %t115 = call ptr @fn_emit_bind(ptr %t114) store ptr %t115, ptr %t116 - store ptr @.str1546, ptr %t117 + store ptr @.str3379, 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_str_eq(ptr %t120, ptr @.str1547) + %t121 = call i32 @fn_str_eq(ptr %t120, ptr @.str3380) %t122 = icmp ne i32 %t121, 0 br i1 %t122, label %then21, label %ifend23 then21: - store ptr @.str1548, ptr %t117 + store ptr @.str3381, 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_str_eq(ptr %t125, ptr @.str1549) + %t126 = call i32 @fn_str_eq(ptr %t125, ptr @.str3382) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then24, label %ifend26 then24: - store ptr @.str1550, ptr %t117 + store ptr @.str3383, 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_str_eq(ptr %t130, ptr @.str1551) + %t131 = call i32 @fn_str_eq(ptr %t130, ptr @.str3384) %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then27, label %ifend29 then27: - store ptr @.str1552, ptr %t117 + store ptr @.str3385, ptr %t117 br label %ifend29 ifend29: %t133 = load ptr, ptr %t117 - %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str1553) + %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str3386) %t135 = load ptr, ptr %t116 %t136 = call ptr @fn_str_concat(ptr %t134, ptr %t135) - %t137 = call ptr @fn_str_concat(ptr %t136, ptr @.str1554) + %t137 = call ptr @fn_str_concat(ptr %t136, ptr @.str3387) %t138 = load ptr, ptr %t102 %t139 = call ptr @fn_str_concat(ptr %t137, ptr %t138) %t140 = call ptr @fn_emit_bind(ptr %t139) @@ -24243,13 +35403,13 @@ ifend29: br label %ifend20 ifend20: %t141 = load ptr, ptr %t93 - %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str1555) + %t142 = call i32 @fn_str_eq(ptr %t141, ptr @.str3388) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then30, label %ifend32 then30: %t144 = load ptr, ptr %t102 - %t145 = call ptr @fn_str_concat(ptr @.str1556, ptr %t144) - %t146 = call ptr @fn_str_concat(ptr %t145, ptr @.str1557) + %t145 = call ptr @fn_str_concat(ptr @.str3389, ptr %t144) + %t146 = call ptr @fn_str_concat(ptr %t145, ptr @.str3390) %t147 = call ptr @fn_emit_bind(ptr %t146) store ptr %t147, ptr %t102 br label %ifend32 @@ -24281,8 +35441,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_str_concat(ptr @.str1558, ptr %t8) - %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str1559) + %t9 = call ptr @fn_str_concat(ptr @.str3391, ptr %t8) + %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str3392) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t0 @@ -24291,43 +35451,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 @.str1560) + %t19 = call ptr @fn_lbl(ptr @.str3393) store ptr %t19, ptr %t20 - %t21 = call ptr @fn_lbl(ptr @.str1561) + %t21 = call ptr @fn_lbl(ptr @.str3394) store ptr %t21, ptr %t22 - %t23 = call ptr @fn_lbl(ptr @.str1562) + %t23 = call ptr @fn_lbl(ptr @.str3395) 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 @.str1563) + call void @fn_emit(ptr @.str3396) %t27 = load ptr, ptr %t12 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1564) + call void @fn_emit(ptr @.str3397) %t28 = load ptr, ptr %t20 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str1565) + call void @fn_emit(ptr @.str3398) %t29 = load ptr, ptr %t22 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str1566) + call void @fn_emit(ptr @.str3399) br label %ifend2 else1: - call void @fn_emit(ptr @.str1567) + call void @fn_emit(ptr @.str3400) %t30 = load ptr, ptr %t12 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str1568) + call void @fn_emit(ptr @.str3401) %t31 = load ptr, ptr %t20 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1569) + call void @fn_emit(ptr @.str3402) %t32 = load ptr, ptr %t24 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str1570) + call void @fn_emit(ptr @.str3403) br label %ifend2 ifend2: %t33 = load ptr, ptr %t20 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str1571) + call void @fn_emit(ptr @.str3404) store i32 0, ptr @g_g_term %t34 = load ptr, ptr %t0 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 5 @@ -24339,10 +35499,10 @@ ifend2: %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1572) + call void @fn_emit(ptr @.str3405) %t41 = load ptr, ptr %t24 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str1573) + call void @fn_emit(ptr @.str3406) br label %ifend5 ifend5: %t42 = load i32, ptr %t18 @@ -24351,7 +35511,7 @@ ifend5: then6: %t44 = load ptr, ptr %t22 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str1574) + call void @fn_emit(ptr @.str3407) store i32 0, ptr @g_g_term %t45 = load ptr, ptr %t0 %t46 = getelementptr inbounds %Cmp_Node, ptr %t45, i32 0, i32 6 @@ -24381,17 +35541,17 @@ ifend11: %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str1575) + call void @fn_emit(ptr @.str3408) %t63 = load ptr, ptr %t24 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str1576) + call void @fn_emit(ptr @.str3409) br label %ifend14 ifend14: br label %ifend8 ifend8: %t64 = load ptr, ptr %t24 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1577) + call void @fn_emit(ptr @.str3410) store i32 0, ptr @g_g_term br label %ret ret: @@ -24407,19 +35567,19 @@ entry: %t13 = alloca ptr %t20 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_lbl(ptr @.str1578) + %t1 = call ptr @fn_lbl(ptr @.str3411) store ptr %t1, ptr %t2 - %t3 = call ptr @fn_lbl(ptr @.str1579) + %t3 = call ptr @fn_lbl(ptr @.str3412) store ptr %t3, ptr %t4 - %t5 = call ptr @fn_lbl(ptr @.str1580) + %t5 = call ptr @fn_lbl(ptr @.str3413) store ptr %t5, ptr %t6 - call void @fn_emit(ptr @.str1581) + call void @fn_emit(ptr @.str3414) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str1582) + call void @fn_emit(ptr @.str3415) %t8 = load ptr, ptr %t2 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str1583) + call void @fn_emit(ptr @.str3416) %t9 = load ptr, ptr %t0 %t10 = getelementptr inbounds %Cmp_Node, ptr %t9, i32 0, i32 4 %t11 = load ptr, ptr %t10 @@ -24428,23 +35588,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_str_concat(ptr @.str1584, ptr %t16) - %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str1585) + %t17 = call ptr @fn_str_concat(ptr @.str3417, ptr %t16) + %t18 = call ptr @fn_str_concat(ptr %t17, ptr @.str3418) %t19 = call ptr @fn_emit_bind(ptr %t18) store ptr %t19, ptr %t20 - call void @fn_emit(ptr @.str1586) + call void @fn_emit(ptr @.str3419) %t21 = load ptr, ptr %t20 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1587) + call void @fn_emit(ptr @.str3420) %t22 = load ptr, ptr %t4 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str1588) + call void @fn_emit(ptr @.str3421) %t23 = load ptr, ptr %t6 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str1589) + call void @fn_emit(ptr @.str3422) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1590) + call void @fn_emit(ptr @.str3423) store i32 0, ptr @g_g_term %t25 = load ptr, ptr %t2 %t26 = load ptr, ptr %t6 @@ -24460,15 +35620,15 @@ entry: %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1591) + call void @fn_emit(ptr @.str3424) %t34 = load ptr, ptr %t2 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1592) + call void @fn_emit(ptr @.str3425) br label %ifend2 ifend2: %t35 = load ptr, ptr %t6 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1593) + call void @fn_emit(ptr @.str3426) store i32 0, ptr @g_g_term br label %ret ret: @@ -24490,7 +35650,7 @@ entry: %t62 = alloca ptr %t67 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str1594) + %t1 = call ptr @fn_emit_alloca(ptr @.str3427) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 4 @@ -24501,29 +35661,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 @.str1595, ptr %t10, ptr %t11) + call void @fn_store_at(ptr @.str3428, 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 @.str1596) - %t16 = call ptr @fn_lbl(ptr @.str1597) + call void @fn_loc_push(ptr %t14, ptr %t15, ptr @.str3429) + %t16 = call ptr @fn_lbl(ptr @.str3430) store ptr %t16, ptr %t17 - %t18 = call ptr @fn_lbl(ptr @.str1598) + %t18 = call ptr @fn_lbl(ptr @.str3431) store ptr %t18, ptr %t19 - %t20 = call ptr @fn_lbl(ptr @.str1599) + %t20 = call ptr @fn_lbl(ptr @.str3432) store ptr %t20, ptr %t21 - %t22 = call ptr @fn_lbl(ptr @.str1600) + %t22 = call ptr @fn_lbl(ptr @.str3433) store ptr %t22, ptr %t23 - call void @fn_emit(ptr @.str1601) + call void @fn_emit(ptr @.str3434) %t24 = load ptr, ptr %t17 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1602) + call void @fn_emit(ptr @.str3435) %t25 = load ptr, ptr %t17 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1603) + call void @fn_emit(ptr @.str3436) %t26 = load ptr, ptr %t2 - %t27 = call ptr @fn_str_concat(ptr @.str1604, ptr %t26) + %t27 = call ptr @fn_str_concat(ptr @.str3437, ptr %t26) %t28 = call ptr @fn_emit_bind(ptr %t27) store ptr %t28, ptr %t29 %t30 = load ptr, ptr %t0 @@ -24532,27 +35692,27 @@ entry: %t33 = call ptr @fn_emit_expr(ptr %t32) store ptr %t33, ptr %t34 %t35 = load ptr, ptr %t29 - %t36 = call ptr @fn_str_concat(ptr @.str1605, ptr %t35) - %t37 = call ptr @fn_str_concat(ptr %t36, ptr @.str1606) + %t36 = call ptr @fn_str_concat(ptr @.str3438, ptr %t35) + %t37 = call ptr @fn_str_concat(ptr %t36, ptr @.str3439) %t38 = load ptr, ptr %t34 %t39 = getelementptr inbounds %Cmp_Val, ptr %t38, i32 0, i32 0 %t40 = load ptr, ptr %t39 %t41 = call ptr @fn_str_concat(ptr %t37, ptr %t40) %t42 = call ptr @fn_emit_bind(ptr %t41) store ptr %t42, ptr %t43 - call void @fn_emit(ptr @.str1607) + call void @fn_emit(ptr @.str3440) %t44 = load ptr, ptr %t43 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str1608) + call void @fn_emit(ptr @.str3441) %t45 = load ptr, ptr %t19 call void @fn_emit(ptr %t45) - call void @fn_emit(ptr @.str1609) + call void @fn_emit(ptr @.str3442) %t46 = load ptr, ptr %t23 call void @fn_emit(ptr %t46) - call void @fn_emit(ptr @.str1610) + call void @fn_emit(ptr @.str3443) %t47 = load ptr, ptr %t19 call void @fn_emit(ptr %t47) - call void @fn_emit(ptr @.str1611) + call void @fn_emit(ptr @.str3444) store i32 0, ptr @g_g_term %t48 = load ptr, ptr %t21 %t49 = load ptr, ptr %t23 @@ -24568,34 +35728,34 @@ entry: %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1612) + call void @fn_emit(ptr @.str3445) %t57 = load ptr, ptr %t21 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1613) + call void @fn_emit(ptr @.str3446) br label %ifend2 ifend2: %t58 = load ptr, ptr %t21 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str1614) + call void @fn_emit(ptr @.str3447) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_str_concat(ptr @.str1615, ptr %t59) + %t60 = call ptr @fn_str_concat(ptr @.str3448, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) store ptr %t61, ptr %t62 %t63 = load ptr, ptr %t62 - %t64 = call ptr @fn_str_concat(ptr @.str1616, ptr %t63) - %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str1617) + %t64 = call ptr @fn_str_concat(ptr @.str3449, ptr %t63) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str3450) %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 @.str1618, ptr %t68, ptr %t69) - call void @fn_emit(ptr @.str1619) + call void @fn_store_at(ptr @.str3451, ptr %t68, ptr %t69) + call void @fn_emit(ptr @.str3452) %t70 = load ptr, ptr %t17 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str1620) + call void @fn_emit(ptr @.str3453) %t71 = load ptr, ptr %t23 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str1621) + call void @fn_emit(ptr @.str3454) store i32 0, ptr @g_g_term br label %ret ret: @@ -24625,10 +35785,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 @.str1622) + call void @fn_store_at(ptr %t13, ptr %t16, ptr @.str3455) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1623) + call void @fn_emit(ptr @.str3456) store i32 1, ptr @g_g_term br label %ret ret: @@ -24683,7 +35843,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_str_eq(ptr %t35, ptr @.str1624) + %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str3457) %t37 = icmp ne i32 %t36, 0 %t38 = zext i1 %t37 to i32 store i32 %t38, ptr %t11 @@ -24729,7 +35889,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 @.str1625) + %t6 = call ptr @fn_lbl(ptr @.str3458) store ptr %t6, ptr %t7 store ptr null, ptr %t8 store i32 0, ptr %t9 @@ -24764,7 +35924,7 @@ then3: store ptr %t31, ptr %t8 br label %ifend5 else4: - store ptr @.str1626, ptr %t32 + store ptr @.str3459, ptr %t32 store i32 1, ptr %t33 store i32 0, ptr %t34 br label %wcond6 @@ -24793,8 +35953,8 @@ wbody7: %t54 = load ptr, ptr %t5 %t55 = getelementptr inbounds %Cmp_Val, ptr %t54, i32 0, i32 0 %t56 = load ptr, ptr %t55 - %t57 = call ptr @fn_str_concat(ptr @.str1627, ptr %t56) - %t58 = call ptr @fn_str_concat(ptr %t57, ptr @.str1628) + %t57 = call ptr @fn_str_concat(ptr @.str3460, ptr %t56) + %t58 = call ptr @fn_str_concat(ptr %t57, ptr @.str3461) %t59 = load ptr, ptr %t53 %t60 = getelementptr inbounds %Cmp_Val, ptr %t59, i32 0, i32 0 %t61 = load ptr, ptr %t60 @@ -24811,8 +35971,8 @@ then9: br label %ifend11 else10: %t68 = load ptr, ptr %t32 - %t69 = call ptr @fn_str_concat(ptr @.str1629, ptr %t68) - %t70 = call ptr @fn_str_concat(ptr %t69, ptr @.str1630) + %t69 = call ptr @fn_str_concat(ptr @.str3462, ptr %t68) + %t70 = call ptr @fn_str_concat(ptr %t69, ptr @.str3463) %t71 = load ptr, ptr %t64 %t72 = call ptr @fn_str_concat(ptr %t70, ptr %t71) %t73 = call ptr @fn_emit_bind(ptr %t72) @@ -24824,23 +35984,23 @@ ifend11: store i32 %t75, ptr %t34 br label %wcond6 wend8: - %t76 = call ptr @fn_lbl(ptr @.str1631) + %t76 = call ptr @fn_lbl(ptr @.str3464) store ptr %t76, ptr %t77 - %t78 = call ptr @fn_lbl(ptr @.str1632) + %t78 = call ptr @fn_lbl(ptr @.str3465) store ptr %t78, ptr %t79 - call void @fn_emit(ptr @.str1633) + call void @fn_emit(ptr @.str3466) %t80 = load ptr, ptr %t32 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1634) + call void @fn_emit(ptr @.str3467) %t81 = load ptr, ptr %t77 call void @fn_emit(ptr %t81) - call void @fn_emit(ptr @.str1635) + call void @fn_emit(ptr @.str3468) %t82 = load ptr, ptr %t79 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str1636) + call void @fn_emit(ptr @.str3469) %t83 = load ptr, ptr %t77 call void @fn_emit(ptr %t83) - call void @fn_emit(ptr @.str1637) + call void @fn_emit(ptr @.str3470) store i32 0, ptr @g_g_term %t84 = load ptr, ptr %t27 %t85 = getelementptr inbounds %Cmp_Node, ptr %t84, i32 0, i32 4 @@ -24852,15 +36012,15 @@ wend8: %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str1638) + call void @fn_emit(ptr @.str3471) %t91 = load ptr, ptr %t7 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1639) + call void @fn_emit(ptr @.str3472) br label %ifend14 ifend14: %t92 = load ptr, ptr %t79 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str1640) + call void @fn_emit(ptr @.str3473) store i32 0, ptr @g_g_term br label %ifend5 ifend5: @@ -24887,15 +36047,15 @@ ifend17: %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str1641) + call void @fn_emit(ptr @.str3474) %t106 = load ptr, ptr %t7 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str1642) + call void @fn_emit(ptr @.str3475) br label %ifend20 ifend20: %t107 = load ptr, ptr %t7 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str1643) + call void @fn_emit(ptr @.str3476) store i32 0, ptr @g_g_term br label %ret ret: @@ -24940,7 +36100,7 @@ then0: %t10 = load ptr, ptr %t0 %t11 = getelementptr inbounds %Cmp_Node, ptr %t10, i32 0, i32 1 %t12 = load ptr, ptr %t11 - %t13 = call ptr @fn_str_concat(ptr @.str1644, ptr %t12) + %t13 = call ptr @fn_str_concat(ptr @.str3477, ptr %t12) call void @fn_perr(ptr %t13) br label %ifend2 ifend2: @@ -25048,13 +36208,13 @@ wend8: %t93 = load ptr, ptr %t92 %t94 = call ptr @fn_llty(ptr %t93) store ptr %t94, ptr %t95 - store ptr @.str1645, ptr %t96 + store ptr @.str3478, ptr %t96 %t97 = load ptr, ptr %t95 - %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str1646) + %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str3479) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then12, label %ifend14 then12: - store ptr @.str1647, ptr %t96 + store ptr @.str3480, ptr %t96 br label %ifend14 ifend14: %t100 = load ptr, ptr %t47 @@ -25164,21 +36324,21 @@ wend5: then25: %t172 = call ptr @fn_nreg() store ptr %t172, ptr %t173 - call void @fn_emit(ptr @.str1648) + call void @fn_emit(ptr @.str3481) %t174 = load ptr, ptr %t173 call void @fn_emit(ptr %t174) - call void @fn_emit(ptr @.str1649) - call void @fn_emit(ptr @.str1650) + call void @fn_emit(ptr @.str3482) + call void @fn_emit(ptr @.str3483) %t175 = load ptr, ptr %t0 %t176 = getelementptr inbounds %Cmp_Node, ptr %t175, i32 0, i32 1 %t177 = load ptr, ptr %t176 %t178 = call i32 @fn_net_event_id(ptr %t177) %t179 = call ptr @fn_itoa(i32 %t178) call void @fn_emit(ptr %t179) - call void @fn_emit(ptr @.str1651) + call void @fn_emit(ptr @.str3484) %t180 = load ptr, ptr %t173 call void @fn_emit(ptr %t180) - call void @fn_emit(ptr @.str1652) + call void @fn_emit(ptr @.str3485) store i32 4, ptr %t181 store i32 0, ptr %t182 br label %wcond28 @@ -25196,15 +36356,15 @@ wcond28: wbody29: %t192 = call ptr @fn_nreg() store ptr %t192, ptr %t193 - call void @fn_emit(ptr @.str1653) + call void @fn_emit(ptr @.str3486) %t194 = load ptr, ptr %t193 call void @fn_emit(ptr %t194) - call void @fn_emit(ptr @.str1654) + call void @fn_emit(ptr @.str3487) %t195 = load i32, ptr %t181 %t196 = call ptr @fn_itoa(i32 %t195) call void @fn_emit(ptr %t196) - call void @fn_emit(ptr @.str1655) - call void @fn_emit(ptr @.str1656) + call void @fn_emit(ptr @.str3488) + call void @fn_emit(ptr @.str3489) %t197 = load ptr, ptr %t27 %t198 = getelementptr inbounds %LSlice, ptr %t197, i32 0, i32 0 %t199 = load ptr, ptr %t198 @@ -25212,7 +36372,7 @@ wbody29: %t201 = getelementptr inbounds ptr, ptr %t199, i32 %t200 %t202 = load ptr, ptr %t201 call void @fn_emit(ptr %t202) - call void @fn_emit(ptr @.str1657) + call void @fn_emit(ptr @.str3490) %t203 = load ptr, ptr %t20 %t204 = getelementptr inbounds %LSlice, ptr %t203, i32 0, i32 0 %t205 = load ptr, ptr %t204 @@ -25220,10 +36380,10 @@ wbody29: %t207 = getelementptr inbounds ptr, ptr %t205, i32 %t206 %t208 = load ptr, ptr %t207 call void @fn_emit(ptr %t208) - call void @fn_emit(ptr @.str1658) + call void @fn_emit(ptr @.str3491) %t209 = load ptr, ptr %t193 call void @fn_emit(ptr %t209) - call void @fn_emit(ptr @.str1659) + call void @fn_emit(ptr @.str3492) %t210 = load i32, ptr %t181 %t211 = load ptr, ptr %t5 %t212 = getelementptr inbounds %Cmp_Node, ptr %t211, i32 0, i32 7 @@ -25243,18 +36403,18 @@ wbody29: store i32 %t224, ptr %t182 br label %wcond28 wend30: - store ptr @.str1660, ptr %t225 + store ptr @.str3493, ptr %t225 %t226 = load ptr, ptr %t5 %t227 = getelementptr inbounds %Cmp_Node, ptr %t226, i32 0, i32 3 %t228 = load ptr, ptr %t227 - %t229 = call i32 @fn_str_eq(ptr %t228, ptr @.str1661) + %t229 = call i32 @fn_str_eq(ptr %t228, ptr @.str3494) %t230 = icmp ne i32 %t229, 0 br i1 %t230, label %then31, label %ifend33 then31: - store ptr @.str1662, ptr %t225 + store ptr @.str3495, ptr %t225 br label %ifend33 ifend33: - %t231 = call ptr @fn_find_extern(ptr @.str1663) + %t231 = call ptr @fn_find_extern(ptr @.str3496) %t232 = icmp eq ptr %t231, null %t233 = zext i1 %t232 to i32 %t234 = icmp ne i32 %t233, 0 @@ -25263,18 +36423,18 @@ then34: store i32 1, ptr @g_g_uses_loopback br label %ifend36 ifend36: - call void @fn_emit(ptr @.str1664) + call void @fn_emit(ptr @.str3497) %t235 = call ptr @fn_net_send_sym() call void @fn_emit(ptr %t235) - call void @fn_emit(ptr @.str1665) + call void @fn_emit(ptr @.str3498) %t236 = load ptr, ptr %t225 call void @fn_emit(ptr %t236) - call void @fn_emit(ptr @.str1666) + call void @fn_emit(ptr @.str3499) %t237 = load i32, ptr %t181 %t238 = call ptr @fn_itoa(i32 %t237) call void @fn_emit(ptr %t238) - call void @fn_emit(ptr @.str1667) - %t239 = call ptr @fn_val(ptr @.str1668, ptr @.str1669) + call void @fn_emit(ptr @.str3500) + %t239 = call ptr @fn_val(ptr @.str3501, ptr @.str3502) store ptr %t239, ptr %retval br label %ret ifend27: @@ -25299,7 +36459,7 @@ wbody38: br i1 %t253, label %then40, label %ifend42 then40: %t254 = load ptr, ptr %t241 - call void @fn_buf_puts(ptr %t254, ptr @.str1670) + call void @fn_buf_puts(ptr %t254, ptr @.str3503) br label %ifend42 ifend42: %t255 = load ptr, ptr %t241 @@ -25311,7 +36471,7 @@ ifend42: %t261 = load ptr, ptr %t260 call void @fn_buf_puts(ptr %t255, ptr %t261) %t262 = load ptr, ptr %t241 - call void @fn_buf_puts(ptr %t262, ptr @.str1671) + call void @fn_buf_puts(ptr %t262, ptr @.str3504) %t263 = load ptr, ptr %t241 %t264 = load ptr, ptr %t20 %t265 = getelementptr inbounds %LSlice, ptr %t264, i32 0, i32 0 @@ -25335,35 +36495,35 @@ wend39: then43: %t278 = call ptr @fn_nreg() store ptr %t278, ptr %t279 - call void @fn_emit(ptr @.str1672) + call void @fn_emit(ptr @.str3505) %t280 = load ptr, ptr %t279 call void @fn_emit(ptr %t280) - call void @fn_emit(ptr @.str1673) + call void @fn_emit(ptr @.str3506) %t281 = load ptr, ptr %t0 %t282 = getelementptr inbounds %Cmp_Node, ptr %t281, i32 0, i32 1 %t283 = load ptr, ptr %t282 call void @fn_emit(ptr %t283) - call void @fn_emit(ptr @.str1674) + call void @fn_emit(ptr @.str3507) %t284 = load ptr, ptr %t241 %t285 = call ptr @fn_buf_str(ptr %t284) call void @fn_emit(ptr %t285) - call void @fn_emit(ptr @.str1675) + call void @fn_emit(ptr @.str3508) %t286 = load ptr, ptr %t279 - %t287 = call ptr @fn_val(ptr %t286, ptr @.str1676) + %t287 = call ptr @fn_val(ptr %t286, ptr @.str3509) store ptr %t287, ptr %retval br label %ret ifend45: - call void @fn_emit(ptr @.str1677) + call void @fn_emit(ptr @.str3510) %t288 = load ptr, ptr %t0 %t289 = getelementptr inbounds %Cmp_Node, ptr %t288, i32 0, i32 1 %t290 = load ptr, ptr %t289 call void @fn_emit(ptr %t290) - call void @fn_emit(ptr @.str1678) + call void @fn_emit(ptr @.str3511) %t291 = load ptr, ptr %t241 %t292 = call ptr @fn_buf_str(ptr %t291) call void @fn_emit(ptr %t292) - call void @fn_emit(ptr @.str1679) - %t293 = call ptr @fn_val(ptr @.str1680, ptr @.str1681) + call void @fn_emit(ptr @.str3512) + %t293 = call ptr @fn_val(ptr @.str3513, ptr @.str3514) store ptr %t293, ptr %retval br label %ret ret: @@ -25446,14 +36606,14 @@ ifend5: %t50 = icmp ne i32 %t49, 0 br i1 %t50, label %then6, label %else7 then6: - store ptr @.str1682, ptr %t51 + store ptr @.str3515, ptr %t51 %t52 = load ptr, ptr %t10 %t53 = call ptr @fn_llty(ptr %t52) - %t54 = call i32 @fn_str_eq(ptr %t53, ptr @.str1683) + %t54 = call i32 @fn_str_eq(ptr %t53, ptr @.str3516) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %then9, label %ifend11 then9: - store ptr @.str1684, ptr %t51 + store ptr @.str3517, ptr %t51 br label %ifend11 ifend11: %t56 = load ptr, ptr %t10 @@ -25557,7 +36717,7 @@ ifend26: %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %then27, label %ifend29 then27: - call void @fn_emit(ptr @.str1685) + call void @fn_emit(ptr @.str3518) %t120 = load ptr, ptr @g_brk_lbl %t121 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 0 %t122 = load ptr, ptr %t121 @@ -25566,7 +36726,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 @.str1686) + call void @fn_emit(ptr @.str3519) store i32 1, ptr @g_g_term br label %ret ifend29: @@ -25578,7 +36738,7 @@ ifend29: %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then30, label %ifend32 then30: - call void @fn_emit(ptr @.str1687) + call void @fn_emit(ptr @.str3520) %t133 = load ptr, ptr @g_cnt_lbl %t134 = getelementptr inbounds %LSlice, ptr %t133, i32 0, i32 0 %t135 = load ptr, ptr %t134 @@ -25587,7 +36747,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 @.str1688) + call void @fn_emit(ptr @.str3521) store i32 1, ptr @g_g_term br label %ret ifend32: @@ -25703,13 +36863,13 @@ then57: %t209 = icmp ne i32 %t208, 0 br i1 %t209, label %then60, label %ifend62 then60: - call void @fn_perr(ptr @.str1689) + call void @fn_perr(ptr @.str3522) br label %ifend62 ifend62: - call void @fn_emit(ptr @.str1690) + call void @fn_emit(ptr @.str3523) %t210 = load ptr, ptr @g_g_cancel_addr call void @fn_emit(ptr %t210) - call void @fn_emit(ptr @.str1691) + call void @fn_emit(ptr @.str3524) br label %ret ifend59: %t211 = load ptr, ptr %t0 @@ -25751,7 +36911,7 @@ then69: store ptr %t234, ptr %t235 br label %ret ifend71: - call void @fn_perr(ptr @.str1692) + call void @fn_perr(ptr @.str3525) br label %ret ret: ret void @@ -26026,8 +37186,9 @@ entry: %t24 = alloca i32 %t38 = alloca ptr %t90 = alloca i32 - call void @fn_emith(ptr @.str1693) - call void @fn_emith(ptr @.str1694) + call void @fn_emith(ptr @.str3526) + call void @fn_emith(ptr @.str3527) + call void @fn_emith(ptr @.str3528) %t0 = load ptr, ptr @g_g_scenes %t1 = getelementptr inbounds %LSlice, ptr %t0, i32 0, i32 1 %t2 = load i32, ptr %t1 @@ -26036,31 +37197,31 @@ entry: %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then0, label %ifend2 then0: - call void @fn_emith(ptr @.str1695) + call void @fn_emith(ptr @.str3529) br label %ifend2 ifend2: - call void @fn_emith(ptr @.str1696) + call void @fn_emith(ptr @.str3530) %t6 = call ptr @fn_itoa(i32 1024) store ptr %t6, ptr %t7 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_str_concat(ptr @.str1697, ptr %t8) - %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str1698) + %t9 = call ptr @fn_str_concat(ptr @.str3531, ptr %t8) + %t10 = call ptr @fn_str_concat(ptr %t9, ptr @.str3532) call void @fn_emith(ptr %t10) %t11 = load ptr, ptr %t7 - %t12 = call ptr @fn_str_concat(ptr @.str1699, ptr %t11) - %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str1700) + %t12 = call ptr @fn_str_concat(ptr @.str3533, ptr %t11) + %t13 = call ptr @fn_str_concat(ptr %t12, ptr @.str3534) call void @fn_emith(ptr %t13) %t14 = load ptr, ptr %t7 - %t15 = call ptr @fn_str_concat(ptr @.str1701, ptr %t14) - %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str1702) + %t15 = call ptr @fn_str_concat(ptr @.str3535, ptr %t14) + %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str3536) call void @fn_emith(ptr %t16) - call void @fn_emith(ptr @.str1703) + call void @fn_emith(ptr @.str3537) %t17 = call i32 @fn_net_any() %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then3, label %ifend5 then3: - call void @fn_emith(ptr @.str1704) - call void @fn_emith(ptr @.str1705) + call void @fn_emith(ptr @.str3538) + call void @fn_emith(ptr @.str3539) br label %ifend5 ifend5: %t19 = call i32 @fn_net_has_owned() @@ -26068,8 +37229,8 @@ ifend5: br i1 %t20, label %then6, label %ifend8 then6: %t21 = load ptr, ptr %t7 - %t22 = call ptr @fn_str_concat(ptr @.str1706, ptr %t21) - %t23 = call ptr @fn_str_concat(ptr %t22, ptr @.str1707) + %t22 = call ptr @fn_str_concat(ptr @.str3540, ptr %t21) + %t23 = call ptr @fn_str_concat(ptr %t22, ptr @.str3541) call void @fn_emith(ptr %t23) br label %ifend8 ifend8: @@ -26103,25 +37264,25 @@ then12: %t45 = load ptr, ptr %t38 %t46 = getelementptr inbounds %Cmp_Node, ptr %t45, i32 0, i32 1 %t47 = load ptr, ptr %t46 - %t48 = call ptr @fn_str_concat(ptr @.str1708, ptr %t47) - %t49 = call ptr @fn_str_concat(ptr %t48, ptr @.str1709) + %t48 = call ptr @fn_str_concat(ptr @.str3542, ptr %t47) + %t49 = call ptr @fn_str_concat(ptr %t48, ptr @.str3543) %t50 = load ptr, ptr %t7 %t51 = call ptr @fn_str_concat(ptr %t49, ptr %t50) - %t52 = call ptr @fn_str_concat(ptr %t51, ptr @.str1710) + %t52 = call ptr @fn_str_concat(ptr %t51, ptr @.str3544) %t53 = load ptr, ptr %t38 %t54 = getelementptr inbounds %Cmp_Node, ptr %t53, i32 0, i32 1 %t55 = load ptr, ptr %t54 %t56 = call ptr @fn_str_concat(ptr %t52, ptr %t55) - %t57 = call ptr @fn_str_concat(ptr %t56, ptr @.str1711) + %t57 = call ptr @fn_str_concat(ptr %t56, ptr @.str3545) call void @fn_emith(ptr %t57) %t58 = load ptr, ptr %t38 %t59 = getelementptr inbounds %Cmp_Node, ptr %t58, i32 0, i32 1 %t60 = load ptr, ptr %t59 - %t61 = call ptr @fn_str_concat(ptr @.str1712, ptr %t60) - %t62 = call ptr @fn_str_concat(ptr %t61, ptr @.str1713) + %t61 = call ptr @fn_str_concat(ptr @.str3546, ptr %t60) + %t62 = call ptr @fn_str_concat(ptr %t61, ptr @.str3547) %t63 = load ptr, ptr %t7 %t64 = call ptr @fn_str_concat(ptr %t62, ptr %t63) - %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str1714) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str3548) call void @fn_emith(ptr %t65) br label %ifend14 ifend14: @@ -26136,8 +37297,8 @@ then15: %t72 = load ptr, ptr %t38 %t73 = getelementptr inbounds %Cmp_Node, ptr %t72, i32 0, i32 1 %t74 = load ptr, ptr %t73 - %t75 = call ptr @fn_str_concat(ptr @.str1715, ptr %t74) - %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str1716) + %t75 = call ptr @fn_str_concat(ptr @.str3549, ptr %t74) + %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str3550) call void @fn_emith(ptr %t76) br label %ifend17 ifend17: @@ -26152,8 +37313,8 @@ then18: %t83 = load ptr, ptr %t38 %t84 = getelementptr inbounds %Cmp_Node, ptr %t83, i32 0, i32 1 %t85 = load ptr, ptr %t84 - %t86 = call ptr @fn_str_concat(ptr @.str1717, ptr %t85) - %t87 = call ptr @fn_str_concat(ptr %t86, ptr @.str1718) + %t86 = call ptr @fn_str_concat(ptr @.str3551, ptr %t85) + %t87 = call ptr @fn_str_concat(ptr %t86, ptr @.str3552) call void @fn_emith(ptr %t87) br label %ifend20 ifend20: @@ -26180,8 +37341,8 @@ wbody22: %t101 = load i32, ptr %t90 %t102 = getelementptr inbounds ptr, ptr %t100, i32 %t101 %t103 = load ptr, ptr %t102 - %t104 = call ptr @fn_str_concat(ptr @.str1719, ptr %t103) - %t105 = call ptr @fn_str_concat(ptr %t104, ptr @.str1720) + %t104 = call ptr @fn_str_concat(ptr @.str3553, ptr %t103) + %t105 = call ptr @fn_str_concat(ptr %t104, ptr @.str3554) call void @fn_emith(ptr %t105) %t106 = load i32, ptr %t90 %t107 = add i32 %t106, 1 @@ -26200,7 +37361,7 @@ entry: %t24 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emit(ptr @.str1721) + call void @fn_emit(ptr @.str3555) store i32 0, ptr %t2 br label %wcond0 wcond0: @@ -26228,15 +37389,15 @@ wbody1: then3: %t21 = load i32, ptr %t2 %t22 = call ptr @fn_itoa(i32 %t21) - %t23 = call ptr @fn_str_concat(ptr @.str1722, ptr %t22) + %t23 = call ptr @fn_str_concat(ptr @.str3556, ptr %t22) store ptr %t23, ptr %t24 - call void @fn_emit(ptr @.str1723) + call void @fn_emit(ptr @.str3557) %t25 = load ptr, ptr %t24 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1724) + call void @fn_emit(ptr @.str3558) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1725) + call void @fn_emit(ptr @.str3559) %t27 = load ptr, ptr @g_prog %t28 = getelementptr inbounds %LSlice, ptr %t27, i32 0, i32 0 %t29 = load ptr, ptr %t28 @@ -26246,11 +37407,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 @.str1726) - call void @fn_emit(ptr @.str1727) + call void @fn_emit(ptr @.str3560) + call void @fn_emit(ptr @.str3561) %t35 = load ptr, ptr %t24 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1728) + call void @fn_emit(ptr @.str3562) br label %ifend5 ifend5: %t36 = load i32, ptr %t2 @@ -26258,66 +37419,66 @@ ifend5: store i32 %t37, ptr %t2 br label %wcond0 wend2: - call void @fn_emit(ptr @.str1729) + call void @fn_emit(ptr @.str3563) %t38 = load ptr, ptr %t1 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str1730) - call void @fn_emit(ptr @.str1731) + call void @fn_emit(ptr @.str3564) + call void @fn_emit(ptr @.str3565) %t39 = call i32 @fn_net_has_owned() %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1732) + call void @fn_emit(ptr @.str3566) %t41 = load ptr, ptr %t1 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str1733) - call void @fn_emit(ptr @.str1734) + call void @fn_emit(ptr @.str3567) + call void @fn_emit(ptr @.str3568) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str1735) - call void @fn_emit(ptr @.str1736) - call void @fn_emit(ptr @.str1737) - call void @fn_emit(ptr @.str1738) - call void @fn_emit(ptr @.str1739) - call void @fn_emit(ptr @.str1740) - call void @fn_emit(ptr @.str1741) - call void @fn_emit(ptr @.str1742) - call void @fn_emit(ptr @.str1743) + call void @fn_emit(ptr @.str3569) + call void @fn_emit(ptr @.str3570) + call void @fn_emit(ptr @.str3571) + call void @fn_emit(ptr @.str3572) + call void @fn_emit(ptr @.str3573) + call void @fn_emit(ptr @.str3574) + call void @fn_emit(ptr @.str3575) + call void @fn_emit(ptr @.str3576) + call void @fn_emit(ptr @.str3577) %t42 = load ptr, ptr %t1 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str1744) - call void @fn_emit(ptr @.str1745) - call void @fn_emit(ptr @.str1746) - call void @fn_emit(ptr @.str1747) - call void @fn_emit(ptr @.str1748) - call void @fn_emit(ptr @.str1749) - call void @fn_emit(ptr @.str1750) - call void @fn_emit(ptr @.str1751) - call void @fn_emit(ptr @.str1752) - call void @fn_emit(ptr @.str1753) - call void @fn_emit(ptr @.str1754) - call void @fn_emit(ptr @.str1755) + call void @fn_emit(ptr @.str3578) + call void @fn_emit(ptr @.str3579) + call void @fn_emit(ptr @.str3580) + call void @fn_emit(ptr @.str3581) + call void @fn_emit(ptr @.str3582) + call void @fn_emit(ptr @.str3583) + call void @fn_emit(ptr @.str3584) + call void @fn_emit(ptr @.str3585) + call void @fn_emit(ptr @.str3586) + call void @fn_emit(ptr @.str3587) + call void @fn_emit(ptr @.str3588) + call void @fn_emit(ptr @.str3589) %t43 = load ptr, ptr %t1 call void @fn_emit(ptr %t43) - call void @fn_emit(ptr @.str1756) - call void @fn_emit(ptr @.str1757) - call void @fn_emit(ptr @.str1758) - call void @fn_emit(ptr @.str1759) - call void @fn_emit(ptr @.str1760) + call void @fn_emit(ptr @.str3590) + call void @fn_emit(ptr @.str3591) + call void @fn_emit(ptr @.str3592) + call void @fn_emit(ptr @.str3593) + call void @fn_emit(ptr @.str3594) %t44 = load ptr, ptr %t1 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str1761) - call void @fn_emit(ptr @.str1762) - call void @fn_emit(ptr @.str1763) - call void @fn_emit(ptr @.str1764) - call void @fn_emit(ptr @.str1765) + call void @fn_emit(ptr @.str3595) + call void @fn_emit(ptr @.str3596) + call void @fn_emit(ptr @.str3597) + call void @fn_emit(ptr @.str3598) + call void @fn_emit(ptr @.str3599) %t45 = load ptr, ptr %t1 call void @fn_emit(ptr %t45) - call void @fn_emit(ptr @.str1766) - call void @fn_emit(ptr @.str1767) - call void @fn_emit(ptr @.str1768) - call void @fn_emit(ptr @.str1769) - call void @fn_emit(ptr @.str1770) + call void @fn_emit(ptr @.str3600) + call void @fn_emit(ptr @.str3601) + call void @fn_emit(ptr @.str3602) + call void @fn_emit(ptr @.str3603) + call void @fn_emit(ptr @.str3604) br label %ret ret: ret void @@ -26434,10 +37595,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 @.str1771) + %t3 = call ptr @fn_emit_alloca(ptr @.str3605) store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - call void @fn_store_at(ptr @.str1772, ptr @.str1773, ptr %t5) + call void @fn_store_at(ptr @.str3606, ptr @.str3607, 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 @@ -26489,88 +37650,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 @.str1774) + %t41 = call ptr @fn_lbl(ptr @.str3608) store ptr %t41, ptr %t42 - %t43 = call ptr @fn_lbl(ptr @.str1775) + %t43 = call ptr @fn_lbl(ptr @.str3609) store ptr %t43, ptr %t44 - %t45 = call ptr @fn_lbl(ptr @.str1776) + %t45 = call ptr @fn_lbl(ptr @.str3610) store ptr %t45, ptr %t46 - %t47 = call ptr @fn_lbl(ptr @.str1777) + %t47 = call ptr @fn_lbl(ptr @.str3611) store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1778) + call void @fn_emit(ptr @.str3612) %t49 = load ptr, ptr %t42 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1779) + call void @fn_emit(ptr @.str3613) %t50 = load ptr, ptr %t42 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1780) + call void @fn_emit(ptr @.str3614) %t51 = load ptr, ptr %t4 - %t52 = call ptr @fn_str_concat(ptr @.str1781, ptr %t51) + %t52 = call ptr @fn_str_concat(ptr @.str3615, ptr %t51) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - %t55 = call ptr @fn_emit_bind(ptr @.str1782) + %t55 = call ptr @fn_emit_bind(ptr @.str3616) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t54 - %t58 = call ptr @fn_str_concat(ptr @.str1783, ptr %t57) - %t59 = call ptr @fn_str_concat(ptr %t58, ptr @.str1784) + %t58 = call ptr @fn_str_concat(ptr @.str3617, ptr %t57) + %t59 = call ptr @fn_str_concat(ptr %t58, ptr @.str3618) %t60 = load ptr, ptr %t56 %t61 = call ptr @fn_str_concat(ptr %t59, ptr %t60) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 - call void @fn_emit(ptr @.str1785) + call void @fn_emit(ptr @.str3619) %t64 = load ptr, ptr %t63 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1786) + call void @fn_emit(ptr @.str3620) %t65 = load ptr, ptr %t44 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str1787) + call void @fn_emit(ptr @.str3621) %t66 = load ptr, ptr %t48 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str1788) + call void @fn_emit(ptr @.str3622) %t67 = load ptr, ptr %t44 call void @fn_emit(ptr %t67) - call void @fn_emit(ptr @.str1789) + call void @fn_emit(ptr @.str3623) store i32 0, ptr @g_g_term %t68 = load ptr, ptr %t4 - %t69 = call ptr @fn_str_concat(ptr @.str1790, ptr %t68) + %t69 = call ptr @fn_str_concat(ptr @.str3624, 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 @.str1791) + call void @fn_emit(ptr @.str3625) %t74 = load ptr, ptr %t73 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str1792) + call void @fn_emit(ptr @.str3626) %t75 = load ptr, ptr %t2 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str1793) + call void @fn_emit(ptr @.str3627) %t76 = load ptr, ptr %t71 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str1794) + call void @fn_emit(ptr @.str3628) %t77 = load ptr, ptr %t73 - %t78 = call ptr @fn_str_concat(ptr @.str1795, ptr %t77) + %t78 = call ptr @fn_str_concat(ptr @.str3629, ptr %t77) %t79 = call ptr @fn_emit_bind(ptr %t78) store ptr %t79, ptr %t80 %t81 = load ptr, ptr %t80 - %t82 = call ptr @fn_str_concat(ptr @.str1796, ptr %t81) - %t83 = call ptr @fn_str_concat(ptr %t82, ptr @.str1797) + %t82 = call ptr @fn_str_concat(ptr @.str3630, ptr %t81) + %t83 = call ptr @fn_str_concat(ptr %t82, ptr @.str3631) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 - %t86 = call ptr @fn_lbl(ptr @.str1798) + %t86 = call ptr @fn_lbl(ptr @.str3632) store ptr %t86, ptr %t87 - call void @fn_emit(ptr @.str1799) + call void @fn_emit(ptr @.str3633) %t88 = load ptr, ptr %t85 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1800) + call void @fn_emit(ptr @.str3634) %t89 = load ptr, ptr %t87 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str1801) + call void @fn_emit(ptr @.str3635) %t90 = load ptr, ptr %t46 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1802) + call void @fn_emit(ptr @.str3636) %t91 = load ptr, ptr %t87 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1803) + call void @fn_emit(ptr @.str3637) %t92 = load ptr, ptr %t0 %t93 = getelementptr inbounds %Cmp_Node, ptr %t92, i32 0, i32 6 %t94 = load ptr, ptr %t93 @@ -26603,7 +37764,7 @@ wbody6: %t117 = load ptr, ptr %t116 %t118 = call i32 @fn_find_arch_id(ptr %t117) store i32 %t118, ptr %t119 - store ptr @.str1804, ptr %t120 + store ptr @.str3638, ptr %t120 %t121 = load i32, ptr %t119 %t122 = icmp sgt i32 %t121, 0 %t123 = zext i1 %t122 to i32 @@ -26612,23 +37773,23 @@ wbody6: then8: %t125 = call ptr @fn_nreg() store ptr %t125, ptr %t126 - call void @fn_emit(ptr @.str1805) + call void @fn_emit(ptr @.str3639) %t127 = load ptr, ptr %t126 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str1806) + call void @fn_emit(ptr @.str3640) %t128 = load ptr, ptr %t2 call void @fn_emit(ptr %t128) - call void @fn_emit(ptr @.str1807) + call void @fn_emit(ptr @.str3641) %t129 = load ptr, ptr %t71 call void @fn_emit(ptr %t129) - call void @fn_emit(ptr @.str1808) + call void @fn_emit(ptr @.str3642) %t130 = load ptr, ptr %t126 - %t131 = call ptr @fn_str_concat(ptr @.str1809, ptr %t130) + %t131 = call ptr @fn_str_concat(ptr @.str3643, ptr %t130) %t132 = call ptr @fn_emit_bind(ptr %t131) store ptr %t132, ptr %t133 %t134 = load ptr, ptr %t133 - %t135 = call ptr @fn_str_concat(ptr @.str1810, ptr %t134) - %t136 = call ptr @fn_str_concat(ptr %t135, ptr @.str1811) + %t135 = call ptr @fn_str_concat(ptr @.str3644, ptr %t134) + %t136 = call ptr @fn_str_concat(ptr %t135, ptr @.str3645) %t137 = load i32, ptr %t119 %t138 = call ptr @fn_itoa(i32 %t137) %t139 = call ptr @fn_str_concat(ptr %t136, ptr %t138) @@ -26637,17 +37798,17 @@ then8: %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_str_concat(ptr @.str1812, ptr %t144) + %t145 = call ptr @fn_str_concat(ptr @.str3646, ptr %t144) %t146 = call ptr @fn_emit_bind(ptr %t145) store ptr %t146, ptr %t147 %t148 = load ptr, ptr %t147 - %t149 = call ptr @fn_str_concat(ptr @.str1813, ptr %t148) - %t150 = call ptr @fn_str_concat(ptr %t149, ptr @.str1814) + %t149 = call ptr @fn_str_concat(ptr @.str3647, ptr %t148) + %t150 = call ptr @fn_str_concat(ptr %t149, ptr @.str3648) %t151 = call ptr @fn_emit_bind(ptr %t150) store ptr %t151, ptr %t152 %t153 = load ptr, ptr %t141 - %t154 = call ptr @fn_str_concat(ptr @.str1815, ptr %t153) - %t155 = call ptr @fn_str_concat(ptr %t154, ptr @.str1816) + %t154 = call ptr @fn_str_concat(ptr @.str3649, ptr %t153) + %t155 = call ptr @fn_str_concat(ptr %t154, ptr @.str3650) %t156 = load ptr, ptr %t152 %t157 = call ptr @fn_str_concat(ptr %t155, ptr %t156) %t158 = call ptr @fn_emit_bind(ptr %t157) @@ -26656,47 +37817,47 @@ then8: else9: %t159 = call ptr @fn_nreg() store ptr %t159, ptr %t160 - call void @fn_emit(ptr @.str1817) + call void @fn_emit(ptr @.str3651) %t161 = load ptr, ptr %t160 call void @fn_emit(ptr %t161) - call void @fn_emit(ptr @.str1818) + call void @fn_emit(ptr @.str3652) %t162 = load ptr, ptr %t2 call void @fn_emit(ptr %t162) - call void @fn_emit(ptr @.str1819) + call void @fn_emit(ptr @.str3653) %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 @.str1820) + call void @fn_emit(ptr @.str3654) %t166 = load ptr, ptr %t71 call void @fn_emit(ptr %t166) - call void @fn_emit(ptr @.str1821) + call void @fn_emit(ptr @.str3655) %t167 = load ptr, ptr %t160 - %t168 = call ptr @fn_str_concat(ptr @.str1822, ptr %t167) + %t168 = call ptr @fn_str_concat(ptr @.str3656, ptr %t167) %t169 = call ptr @fn_emit_bind(ptr %t168) store ptr %t169, ptr %t170 %t171 = load ptr, ptr %t170 - %t172 = call ptr @fn_str_concat(ptr @.str1823, ptr %t171) - %t173 = call ptr @fn_str_concat(ptr %t172, ptr @.str1824) + %t172 = call ptr @fn_str_concat(ptr @.str3657, ptr %t171) + %t173 = call ptr @fn_str_concat(ptr %t172, ptr @.str3658) %t174 = call ptr @fn_emit_bind(ptr %t173) store ptr %t174, ptr %t120 br label %ifend10 ifend10: - %t175 = call ptr @fn_lbl(ptr @.str1825) + %t175 = call ptr @fn_lbl(ptr @.str3659) store ptr %t175, ptr %t176 - call void @fn_emit(ptr @.str1826) + call void @fn_emit(ptr @.str3660) %t177 = load ptr, ptr %t120 call void @fn_emit(ptr %t177) - call void @fn_emit(ptr @.str1827) + call void @fn_emit(ptr @.str3661) %t178 = load ptr, ptr %t176 call void @fn_emit(ptr %t178) - call void @fn_emit(ptr @.str1828) + call void @fn_emit(ptr @.str3662) %t179 = load ptr, ptr %t46 call void @fn_emit(ptr %t179) - call void @fn_emit(ptr @.str1829) + call void @fn_emit(ptr @.str3663) %t180 = load ptr, ptr %t176 call void @fn_emit(ptr %t180) - call void @fn_emit(ptr @.str1830) + call void @fn_emit(ptr @.str3664) %t181 = load i32, ptr %t96 %t182 = add i32 %t181, 1 store i32 %t182, ptr %t96 @@ -26766,35 +37927,35 @@ then16: then19: %t231 = call ptr @fn_nreg() store ptr %t231, ptr %t232 - call void @fn_emit(ptr @.str1831) + call void @fn_emit(ptr @.str3665) %t233 = load ptr, ptr %t232 call void @fn_emit(ptr %t233) - call void @fn_emit(ptr @.str1832) + call void @fn_emit(ptr @.str3666) %t234 = load ptr, ptr %t2 call void @fn_emit(ptr %t234) - call void @fn_emit(ptr @.str1833) + call void @fn_emit(ptr @.str3667) %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 @.str1834) + call void @fn_emit(ptr @.str3668) %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 @.str1835) + call void @fn_emit(ptr @.str3669) %t241 = load ptr, ptr %t71 call void @fn_emit(ptr %t241) - call void @fn_emit(ptr @.str1836) - %t242 = call ptr @fn_emit_alloca(ptr @.str1837) + call void @fn_emit(ptr @.str3670) + %t242 = call ptr @fn_emit_alloca(ptr @.str3671) store ptr %t242, ptr %t243 - call void @fn_emit(ptr @.str1838) + call void @fn_emit(ptr @.str3672) %t244 = load ptr, ptr %t232 call void @fn_emit(ptr %t244) - call void @fn_emit(ptr @.str1839) + call void @fn_emit(ptr @.str3673) %t245 = load ptr, ptr %t243 call void @fn_emit(ptr %t245) - call void @fn_emit(ptr @.str1840) + call void @fn_emit(ptr @.str3674) %t246 = load ptr, ptr %t0 %t247 = getelementptr inbounds %Cmp_Node, ptr %t246, i32 0, i32 7 %t248 = load ptr, ptr %t247 @@ -26838,25 +37999,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_str_concat(ptr @.str1841, ptr %t277) - %t279 = call ptr @fn_str_concat(ptr %t278, ptr @.str1842) + %t278 = call ptr @fn_str_concat(ptr @.str3675, ptr %t277) + %t279 = call ptr @fn_str_concat(ptr %t278, ptr @.str3676) %t280 = call ptr @fn_emit_bind(ptr %t279) store ptr %t280, ptr %t281 - %t282 = call ptr @fn_lbl(ptr @.str1843) + %t282 = call ptr @fn_lbl(ptr @.str3677) store ptr %t282, ptr %t283 - call void @fn_emit(ptr @.str1844) + call void @fn_emit(ptr @.str3678) %t284 = load ptr, ptr %t281 call void @fn_emit(ptr %t284) - call void @fn_emit(ptr @.str1845) + call void @fn_emit(ptr @.str3679) %t285 = load ptr, ptr %t283 call void @fn_emit(ptr %t285) - call void @fn_emit(ptr @.str1846) + call void @fn_emit(ptr @.str3680) %t286 = load ptr, ptr %t46 call void @fn_emit(ptr %t286) - call void @fn_emit(ptr @.str1847) + call void @fn_emit(ptr @.str3681) %t287 = load ptr, ptr %t283 call void @fn_emit(ptr %t287) - call void @fn_emit(ptr @.str1848) + call void @fn_emit(ptr @.str3682) br label %ifend24 ifend24: %t288 = load ptr, ptr %t46 @@ -26875,34 +38036,34 @@ ifend24: %t297 = icmp ne i32 %t296, 0 br i1 %t297, label %then25, label %ifend27 then25: - call void @fn_emit(ptr @.str1849) + call void @fn_emit(ptr @.str3683) %t298 = load ptr, ptr %t46 call void @fn_emit(ptr %t298) - call void @fn_emit(ptr @.str1850) + call void @fn_emit(ptr @.str3684) br label %ifend27 ifend27: %t299 = load ptr, ptr %t46 call void @fn_emit(ptr %t299) - call void @fn_emit(ptr @.str1851) + call void @fn_emit(ptr @.str3685) %t300 = load ptr, ptr %t4 - %t301 = call ptr @fn_str_concat(ptr @.str1852, ptr %t300) + %t301 = call ptr @fn_str_concat(ptr @.str3686, ptr %t300) %t302 = call ptr @fn_emit_bind(ptr %t301) store ptr %t302, ptr %t303 %t304 = load ptr, ptr %t303 - %t305 = call ptr @fn_str_concat(ptr @.str1853, ptr %t304) - %t306 = call ptr @fn_str_concat(ptr %t305, ptr @.str1854) + %t305 = call ptr @fn_str_concat(ptr @.str3687, ptr %t304) + %t306 = call ptr @fn_str_concat(ptr %t305, ptr @.str3688) %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 @.str1855, ptr %t309, ptr %t310) - call void @fn_emit(ptr @.str1856) + call void @fn_store_at(ptr @.str3689, ptr %t309, ptr %t310) + call void @fn_emit(ptr @.str3690) %t311 = load ptr, ptr %t42 call void @fn_emit(ptr %t311) - call void @fn_emit(ptr @.str1857) + call void @fn_emit(ptr @.str3691) %t312 = load ptr, ptr %t48 call void @fn_emit(ptr %t312) - call void @fn_emit(ptr @.str1858) + call void @fn_emit(ptr @.str3692) store i32 0, ptr @g_g_term %t313 = load i32, ptr @g_nself %t314 = sub i32 %t313, 1 @@ -26951,47 +38112,47 @@ entry: br i1 %t11, label %then0, label %ifend2 then0: %t12 = load ptr, ptr %t1 - %t13 = call ptr @fn_str_concat(ptr @.str1859, ptr %t12) + %t13 = call ptr @fn_str_concat(ptr @.str3693, 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 @.str1860) + call void @fn_emit(ptr @.str3694) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1861) + call void @fn_emit(ptr @.str3695) %t17 = load ptr, ptr %t4 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1862) + call void @fn_emit(ptr @.str3696) %t18 = load ptr, ptr %t1 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1863) + call void @fn_emit(ptr @.str3697) %t19 = load ptr, ptr %t0 call void @fn_emit(ptr %t19) - call void @fn_emit(ptr @.str1864) - call void @fn_emit(ptr @.str1865) + call void @fn_emit(ptr @.str3698) + call void @fn_emit(ptr @.str3699) %t20 = load ptr, ptr %t15 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1866) + call void @fn_emit(ptr @.str3700) %t21 = call ptr @fn_nreg() store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str1867) + call void @fn_emit(ptr @.str3701) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str1868) + call void @fn_emit(ptr @.str3702) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1869) + call void @fn_emit(ptr @.str3703) %t25 = load ptr, ptr %t1 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1870) + call void @fn_emit(ptr @.str3704) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1871) + call void @fn_emit(ptr @.str3705) %t27 = load ptr, ptr %t0 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1872) + call void @fn_emit(ptr @.str3706) store i32 0, ptr %t28 br label %wcond3 wcond3: @@ -27017,32 +38178,32 @@ wbody4: store ptr %t45, ptr %t46 %t47 = call ptr @fn_nreg() store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1873) + call void @fn_emit(ptr @.str3707) %t49 = load ptr, ptr %t48 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1874) + call void @fn_emit(ptr @.str3708) %t50 = load ptr, ptr %t1 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1875) + call void @fn_emit(ptr @.str3709) %t51 = load ptr, ptr %t22 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str1876) + call void @fn_emit(ptr @.str3710) %t52 = load i32, ptr %t28 %t53 = call ptr @fn_itoa(i32 %t52) call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str1877) + call void @fn_emit(ptr @.str3711) %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 @.str1878, ptr %t59 + store ptr @.str3712, ptr %t59 %t60 = load ptr, ptr %t58 - %t61 = call i32 @fn_str_eq(ptr %t60, ptr @.str1879) + %t61 = call i32 @fn_str_eq(ptr %t60, ptr @.str3713) %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then6, label %ifend8 then6: - store ptr @.str1880, ptr %t59 + store ptr @.str3714, ptr %t59 br label %ifend8 ifend8: %t63 = load ptr, ptr %t46 @@ -27064,16 +38225,16 @@ then9: store ptr %t76, ptr %t59 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1881) + call void @fn_emit(ptr @.str3715) %t77 = load ptr, ptr %t58 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str1882) + call void @fn_emit(ptr @.str3716) %t78 = load ptr, ptr %t59 call void @fn_emit(ptr %t78) - call void @fn_emit(ptr @.str1883) + call void @fn_emit(ptr @.str3717) %t79 = load ptr, ptr %t48 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str1884) + call void @fn_emit(ptr @.str3718) %t80 = load i32, ptr %t28 %t81 = add i32 %t80, 1 store i32 %t81, ptr %t28 @@ -27122,26 +38283,26 @@ wbody16: then18: %t115 = call ptr @fn_nreg() store ptr %t115, ptr %t116 - call void @fn_emit(ptr @.str1885) + call void @fn_emit(ptr @.str3719) %t117 = load ptr, ptr %t116 call void @fn_emit(ptr %t117) - call void @fn_emit(ptr @.str1886) + call void @fn_emit(ptr @.str3720) %t118 = load ptr, ptr %t1 call void @fn_emit(ptr %t118) - call void @fn_emit(ptr @.str1887) + call void @fn_emit(ptr @.str3721) %t119 = load ptr, ptr %t22 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str1888) + call void @fn_emit(ptr @.str3722) %t120 = load i32, ptr %t110 %t121 = call ptr @fn_itoa(i32 %t120) call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str1889) + call void @fn_emit(ptr @.str3723) %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 @.str1890) + call void @fn_emit(ptr @.str3724) %t127 = load ptr, ptr %t7 %t128 = load ptr, ptr %t104 %t129 = getelementptr inbounds %Cmp_Node, ptr %t128, i32 0, i32 1 @@ -27149,15 +38310,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 @.str1891) + call void @fn_emit(ptr @.str3725) %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 @.str1892) + call void @fn_emit(ptr @.str3726) %t136 = load ptr, ptr %t116 call void @fn_emit(ptr %t136) - call void @fn_emit(ptr @.str1893) + call void @fn_emit(ptr @.str3727) br label %ifend20 ifend20: %t137 = load i32, ptr %t86 @@ -27178,15 +38339,15 @@ ifend14: then21: %t146 = load i32, ptr @g_nloc store i32 %t146, ptr %t147 - %t148 = call ptr @fn_emit_alloca(ptr @.str1894) + %t148 = call ptr @fn_emit_alloca(ptr @.str3728) store ptr %t148, ptr %t149 - call void @fn_emit(ptr @.str1895) + call void @fn_emit(ptr @.str3729) %t150 = load ptr, ptr %t22 call void @fn_emit(ptr %t150) - call void @fn_emit(ptr @.str1896) + call void @fn_emit(ptr @.str3730) %t151 = load ptr, ptr %t149 call void @fn_emit(ptr %t151) - call void @fn_emit(ptr @.str1897) + call void @fn_emit(ptr @.str3731) %t152 = load ptr, ptr %t1 %t153 = load ptr, ptr %t149 %t154 = load ptr, ptr %t1 @@ -27198,8 +38359,8 @@ then21: br label %ifend23 ifend23: %t157 = load ptr, ptr %t1 - %t158 = call ptr @fn_str_concat(ptr @.str1898, ptr %t157) - %t159 = call ptr @fn_str_concat(ptr %t158, ptr @.str1899) + %t158 = call ptr @fn_str_concat(ptr @.str3732, ptr %t157) + %t159 = call ptr @fn_str_concat(ptr %t158, ptr @.str3733) store ptr %t159, ptr %t160 %t161 = load ptr, ptr %t160 %t162 = call ptr @fn_find_event(ptr %t161) @@ -27208,13 +38369,13 @@ ifend23: %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then24, label %ifend26 then24: - call void @fn_emit(ptr @.str1900) + call void @fn_emit(ptr @.str3734) %t166 = load ptr, ptr %t160 call void @fn_emit(ptr %t166) - call void @fn_emit(ptr @.str1901) + call void @fn_emit(ptr @.str3735) %t167 = load ptr, ptr %t0 call void @fn_emit(ptr %t167) - call void @fn_emit(ptr @.str1902) + call void @fn_emit(ptr @.str3736) br label %ifend26 ifend26: br label %ret @@ -27262,31 +38423,31 @@ wbody1: store ptr %t23, ptr %t24 %t25 = call ptr @fn_nreg() store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str1903) + call void @fn_emit(ptr @.str3737) %t27 = load ptr, ptr %t26 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1904) + call void @fn_emit(ptr @.str3738) %t28 = load ptr, ptr %t3 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str1905) + call void @fn_emit(ptr @.str3739) %t29 = load ptr, ptr %t24 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str1906) + call void @fn_emit(ptr @.str3740) %t30 = load ptr, ptr %t24 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str1907) + call void @fn_emit(ptr @.str3741) %t31 = load ptr, ptr %t1 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1908) - %t32 = call ptr @fn_emit_alloca(ptr @.str1909) + call void @fn_emit(ptr @.str3742) + %t32 = call ptr @fn_emit_alloca(ptr @.str3743) store ptr %t32, ptr %t33 - call void @fn_emit(ptr @.str1910) + call void @fn_emit(ptr @.str3744) %t34 = load ptr, ptr %t26 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1911) + call void @fn_emit(ptr @.str3745) %t35 = load ptr, ptr %t33 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1912) + call void @fn_emit(ptr @.str3746) %t36 = load ptr, ptr %t24 %t37 = load ptr, ptr %t33 %t38 = load ptr, ptr %t24 @@ -27319,7 +38480,7 @@ entry: %t109 = alloca ptr %t117 = alloca i32 store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_bind(ptr @.str1913) + %t1 = call ptr @fn_emit_bind(ptr @.str3747) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 1 @@ -27336,24 +38497,24 @@ then0: store ptr %t12, ptr %t13 %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1914) + call void @fn_emit(ptr @.str3748) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1915) + call void @fn_emit(ptr @.str3749) %t17 = load ptr, ptr %t13 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1916) + call void @fn_emit(ptr @.str3750) %t18 = load ptr, ptr %t2 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1917) - call void @fn_emit(ptr @.str1918) + call void @fn_emit(ptr @.str3751) + call void @fn_emit(ptr @.str3752) %t19 = load i32, ptr %t7 %t20 = call ptr @fn_itoa(i32 %t19) call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1919) + call void @fn_emit(ptr @.str3753) %t21 = load ptr, ptr %t15 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1920) + call void @fn_emit(ptr @.str3754) %t22 = load ptr, ptr %t0 %t23 = getelementptr inbounds %Cmp_Node, ptr %t22, i32 0, i32 1 %t24 = load ptr, ptr %t23 @@ -27466,8 +38627,8 @@ ifend14: %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Cmp_Node, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %t105 - %t107 = call ptr @fn_str_concat(ptr @.str1921, ptr %t106) - %t108 = call ptr @fn_str_concat(ptr %t107, ptr @.str1922) + %t107 = call ptr @fn_str_concat(ptr @.str3755, ptr %t106) + %t108 = call ptr @fn_str_concat(ptr %t107, ptr @.str3756) store ptr %t108, ptr %t109 %t110 = load ptr, ptr %t109 %t111 = call ptr @fn_find_event(ptr %t110) @@ -27476,13 +38637,13 @@ ifend14: %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then15, label %ifend17 then15: - call void @fn_emit(ptr @.str1923) + call void @fn_emit(ptr @.str3757) %t115 = load ptr, ptr %t109 call void @fn_emit(ptr %t115) - call void @fn_emit(ptr @.str1924) + call void @fn_emit(ptr @.str3758) %t116 = load ptr, ptr %t2 call void @fn_emit(ptr %t116) - call void @fn_emit(ptr @.str1925) + call void @fn_emit(ptr @.str3759) br label %ifend17 ifend17: br label %ifend2 @@ -27569,20 +38730,20 @@ then0: store ptr %t12, ptr %t13 %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1926) + call void @fn_emit(ptr @.str3760) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1927) + call void @fn_emit(ptr @.str3761) %t17 = load ptr, ptr %t13 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1928) + call void @fn_emit(ptr @.str3762) %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 @.str1929) + call void @fn_emit(ptr @.str3763) %t21 = load ptr, ptr %t15 - %t22 = call ptr @fn_str_concat(ptr @.str1930, ptr %t21) + %t22 = call ptr @fn_str_concat(ptr @.str3764, ptr %t21) %t23 = call ptr @fn_emit_bind(ptr %t22) store ptr %t23, ptr %t24 store i32 0, ptr %t25 @@ -27607,42 +38768,42 @@ wbody4: %t40 = load ptr, ptr %t39 store ptr %t40, ptr %t41 %t42 = load ptr, ptr %t24 - %t43 = call ptr @fn_str_concat(ptr @.str1931, ptr %t42) - %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str1932) + %t43 = call ptr @fn_str_concat(ptr @.str3765, ptr %t42) + %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str3766) %t45 = load ptr, ptr %t41 %t46 = call i32 @fn_find_arch_id(ptr %t45) %t47 = call ptr @fn_itoa(i32 %t46) %t48 = call ptr @fn_str_concat(ptr %t44, ptr %t47) %t49 = call ptr @fn_emit_bind(ptr %t48) store ptr %t49, ptr %t50 - %t51 = call ptr @fn_lbl(ptr @.str1933) + %t51 = call ptr @fn_lbl(ptr @.str3767) store ptr %t51, ptr %t52 - %t53 = call ptr @fn_lbl(ptr @.str1934) + %t53 = call ptr @fn_lbl(ptr @.str3768) store ptr %t53, ptr %t54 - call void @fn_emit(ptr @.str1935) + call void @fn_emit(ptr @.str3769) %t55 = load ptr, ptr %t50 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str1936) + call void @fn_emit(ptr @.str3770) %t56 = load ptr, ptr %t52 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1937) + call void @fn_emit(ptr @.str3771) %t57 = load ptr, ptr %t54 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1938) + call void @fn_emit(ptr @.str3772) %t58 = load ptr, ptr %t52 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str1939) + call void @fn_emit(ptr @.str3773) %t59 = load ptr, ptr %t41 call void @fn_emit(ptr %t59) - call void @fn_emit(ptr @.str1940) + call void @fn_emit(ptr @.str3774) %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 @.str1941) + call void @fn_emit(ptr @.str3775) %t63 = load ptr, ptr %t41 - %t64 = call ptr @fn_str_concat(ptr @.str1942, ptr %t63) - %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str1943) + %t64 = call ptr @fn_str_concat(ptr @.str3776, ptr %t63) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str3777) store ptr %t65, ptr %t66 %t67 = load ptr, ptr %t66 %t68 = call ptr @fn_find_event(ptr %t67) @@ -27651,24 +38812,24 @@ wbody4: %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1944) + call void @fn_emit(ptr @.str3778) %t72 = load ptr, ptr %t66 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str1945) + call void @fn_emit(ptr @.str3779) %t73 = load ptr, ptr %t5 %t74 = getelementptr inbounds %Cmp_Val, ptr %t73, i32 0, i32 0 %t75 = load ptr, ptr %t74 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str1946) + call void @fn_emit(ptr @.str3780) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str1947) + call void @fn_emit(ptr @.str3781) %t76 = load ptr, ptr %t54 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str1948) + call void @fn_emit(ptr @.str3782) %t77 = load ptr, ptr %t54 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str1949) + call void @fn_emit(ptr @.str3783) %t78 = load i32, ptr %t25 %t79 = add i32 %t78, 1 store i32 %t79, ptr %t25 @@ -27684,20 +38845,20 @@ ifend2: %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %then9, label %ifend11 then9: - call void @fn_emit(ptr @.str1950) + call void @fn_emit(ptr @.str3784) %t86 = load ptr, ptr %t5 %t87 = getelementptr inbounds %Cmp_Val, ptr %t86, i32 0, i32 0 %t88 = load ptr, ptr %t87 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1951) + call void @fn_emit(ptr @.str3785) br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1952) + call void @fn_emit(ptr @.str3786) %t89 = load ptr, ptr %t5 %t90 = getelementptr inbounds %Cmp_Val, ptr %t89, i32 0, i32 0 %t91 = load ptr, ptr %t90 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1953) + call void @fn_emit(ptr @.str3787) br label %ret ret: ret void @@ -27723,49 +38884,49 @@ entry: store ptr %t6, ptr %t7 %t8 = call ptr @fn_nreg() store ptr %t8, ptr %t9 - call void @fn_emit(ptr @.str1954) + call void @fn_emit(ptr @.str3788) %t10 = load ptr, ptr %t9 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str1955) + call void @fn_emit(ptr @.str3789) %t11 = load ptr, ptr %t7 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str1956) + call void @fn_emit(ptr @.str3790) %t12 = load ptr, ptr %t0 %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 1 %t14 = load ptr, ptr %t13 call void @fn_emit(ptr %t14) - call void @fn_emit(ptr @.str1957) + call void @fn_emit(ptr @.str3791) %t15 = load ptr, ptr %t5 %t16 = getelementptr inbounds %Cmp_Val, ptr %t15, i32 0, i32 0 %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1958) + call void @fn_emit(ptr @.str3792) %t18 = load ptr, ptr %t9 - %t19 = call ptr @fn_str_concat(ptr @.str1959, ptr %t18) + %t19 = call ptr @fn_str_concat(ptr @.str3793, ptr %t18) %t20 = call ptr @fn_emit_bind(ptr %t19) store ptr %t20, ptr %t21 %t22 = load ptr, ptr %t21 - %t23 = call ptr @fn_str_concat(ptr @.str1960, ptr %t22) - %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str1961) + %t23 = call ptr @fn_str_concat(ptr @.str3794, ptr %t22) + %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str3795) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 - %t27 = call ptr @fn_lbl(ptr @.str1962) + %t27 = call ptr @fn_lbl(ptr @.str3796) store ptr %t27, ptr %t28 - %t29 = call ptr @fn_lbl(ptr @.str1963) + %t29 = call ptr @fn_lbl(ptr @.str3797) store ptr %t29, ptr %t30 - call void @fn_emit(ptr @.str1964) + call void @fn_emit(ptr @.str3798) %t31 = load ptr, ptr %t26 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1965) + call void @fn_emit(ptr @.str3799) %t32 = load ptr, ptr %t28 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str1966) + call void @fn_emit(ptr @.str3800) %t33 = load ptr, ptr %t30 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str1967) + call void @fn_emit(ptr @.str3801) %t34 = load ptr, ptr %t28 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1968) + call void @fn_emit(ptr @.str3802) store i32 0, ptr @g_g_term %t35 = load ptr, ptr %t5 %t36 = getelementptr inbounds %Cmp_Val, ptr %t35, i32 0, i32 0 @@ -27783,15 +38944,15 @@ entry: %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1969) + call void @fn_emit(ptr @.str3803) %t48 = load ptr, ptr %t30 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str1970) + call void @fn_emit(ptr @.str3804) br label %ifend2 ifend2: %t49 = load ptr, ptr %t30 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1971) + call void @fn_emit(ptr @.str3805) store i32 0, ptr @g_g_term br label %ret ret: @@ -27823,54 +38984,54 @@ entry: store ptr %t6, ptr %t7 %t8 = call ptr @fn_nreg() store ptr %t8, ptr %t9 - call void @fn_emit(ptr @.str1972) + call void @fn_emit(ptr @.str3806) %t10 = load ptr, ptr %t9 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str1973) + call void @fn_emit(ptr @.str3807) %t11 = load ptr, ptr %t7 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str1974) + call void @fn_emit(ptr @.str3808) %t12 = load ptr, ptr %t0 %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 1 %t14 = load ptr, ptr %t13 call void @fn_emit(ptr %t14) - call void @fn_emit(ptr @.str1975) + call void @fn_emit(ptr @.str3809) %t15 = load ptr, ptr %t5 %t16 = getelementptr inbounds %Cmp_Val, ptr %t15, i32 0, i32 0 %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1976) + call void @fn_emit(ptr @.str3810) %t18 = load ptr, ptr %t9 - %t19 = call ptr @fn_str_concat(ptr @.str1977, ptr %t18) + %t19 = call ptr @fn_str_concat(ptr @.str3811, ptr %t18) %t20 = call ptr @fn_emit_bind(ptr %t19) store ptr %t20, ptr %t21 %t22 = load ptr, ptr %t21 - %t23 = call ptr @fn_str_concat(ptr @.str1978, ptr %t22) - %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str1979) + %t23 = call ptr @fn_str_concat(ptr @.str3812, ptr %t22) + %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str3813) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 - %t27 = call ptr @fn_lbl(ptr @.str1980) + %t27 = call ptr @fn_lbl(ptr @.str3814) store ptr %t27, ptr %t28 - %t29 = call ptr @fn_lbl(ptr @.str1981) + %t29 = call ptr @fn_lbl(ptr @.str3815) store ptr %t29, ptr %t30 - call void @fn_emit(ptr @.str1982) + call void @fn_emit(ptr @.str3816) %t31 = load ptr, ptr %t26 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1983) + call void @fn_emit(ptr @.str3817) %t32 = load ptr, ptr %t28 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str1984) + call void @fn_emit(ptr @.str3818) %t33 = load ptr, ptr %t30 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str1985) + call void @fn_emit(ptr @.str3819) %t34 = load ptr, ptr %t28 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1986) + call void @fn_emit(ptr @.str3820) store i32 0, ptr @g_g_term - call void @fn_emit(ptr @.str1987) + call void @fn_emit(ptr @.str3821) %t35 = load ptr, ptr %t9 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1988) + call void @fn_emit(ptr @.str3822) %t36 = load ptr, ptr %t0 %t37 = getelementptr inbounds %Cmp_Node, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %t37 @@ -27886,37 +39047,37 @@ then0: store i32 %t45, ptr %t46 %t47 = call ptr @fn_nreg() store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1989) + call void @fn_emit(ptr @.str3823) %t49 = load ptr, ptr %t48 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1990) + call void @fn_emit(ptr @.str3824) %t50 = load ptr, ptr %t7 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1991) + call void @fn_emit(ptr @.str3825) %t51 = load ptr, ptr %t0 %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 @.str1992) + call void @fn_emit(ptr @.str3826) %t54 = load ptr, ptr %t0 %t55 = getelementptr inbounds %Cmp_Node, ptr %t54, i32 0, i32 1 %t56 = load ptr, ptr %t55 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1993) + call void @fn_emit(ptr @.str3827) %t57 = load ptr, ptr %t5 %t58 = getelementptr inbounds %Cmp_Val, ptr %t57, i32 0, i32 0 %t59 = load ptr, ptr %t58 call void @fn_emit(ptr %t59) - call void @fn_emit(ptr @.str1994) - %t60 = call ptr @fn_emit_alloca(ptr @.str1995) + call void @fn_emit(ptr @.str3828) + %t60 = call ptr @fn_emit_alloca(ptr @.str3829) store ptr %t60, ptr %t61 - call void @fn_emit(ptr @.str1996) + call void @fn_emit(ptr @.str3830) %t62 = load ptr, ptr %t48 call void @fn_emit(ptr %t62) - call void @fn_emit(ptr @.str1997) + call void @fn_emit(ptr @.str3831) %t63 = load ptr, ptr %t61 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str1998) + call void @fn_emit(ptr @.str3832) %t64 = load ptr, ptr %t0 %t65 = getelementptr inbounds %Cmp_Node, ptr %t64, i32 0, i32 1 %t66 = load ptr, ptr %t65 @@ -27934,8 +39095,8 @@ ifend2: %t73 = load ptr, ptr %t0 %t74 = getelementptr inbounds %Cmp_Node, ptr %t73, i32 0, i32 1 %t75 = load ptr, ptr %t74 - %t76 = call ptr @fn_str_concat(ptr @.str1999, ptr %t75) - %t77 = call ptr @fn_str_concat(ptr %t76, ptr @.str2000) + %t76 = call ptr @fn_str_concat(ptr @.str3833, ptr %t75) + %t77 = call ptr @fn_str_concat(ptr %t76, ptr @.str3834) store ptr %t77, ptr %t78 %t79 = load ptr, ptr %t78 %t80 = call ptr @fn_find_event(ptr %t79) @@ -27944,15 +39105,15 @@ ifend2: %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str2001) + call void @fn_emit(ptr @.str3835) %t84 = load ptr, ptr %t78 call void @fn_emit(ptr %t84) - call void @fn_emit(ptr @.str2002) + call void @fn_emit(ptr @.str3836) %t85 = load ptr, ptr %t5 %t86 = getelementptr inbounds %Cmp_Val, ptr %t85, i32 0, i32 0 %t87 = load ptr, ptr %t86 call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str2003) + call void @fn_emit(ptr @.str3837) br label %ifend5 ifend5: %t88 = load i32, ptr @g_g_term @@ -27961,15 +39122,15 @@ ifend5: %t91 = icmp ne i32 %t90, 0 br i1 %t91, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str2004) + call void @fn_emit(ptr @.str3838) %t92 = load ptr, ptr %t30 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str2005) + call void @fn_emit(ptr @.str3839) br label %ifend8 ifend8: %t93 = load ptr, ptr %t30 call void @fn_emit(ptr %t93) - call void @fn_emit(ptr @.str2006) + call void @fn_emit(ptr @.str3840) store i32 0, ptr @g_g_term br label %ret ret: @@ -27992,7 +39153,7 @@ entry: %t128 = alloca ptr %t149 = alloca ptr store ptr %arg_st, ptr %t0 - store ptr @.str2007, ptr %t1 + store ptr @.str3841, ptr %t1 %t2 = load ptr, ptr %t0 %t3 = getelementptr inbounds %Cmp_Node, ptr %t2, i32 0, i32 2 %t4 = load i32, ptr %t3 @@ -28001,7 +39162,7 @@ entry: %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: - store ptr @.str2008, ptr %t1 + store ptr @.str3842, ptr %t1 br label %ifend2 ifend2: %t9 = load ptr, ptr %t0 @@ -28017,7 +39178,7 @@ sc3: %t16 = load ptr, ptr %t0 %t17 = getelementptr inbounds %Cmp_Node, ptr %t16, i32 0, i32 3 %t18 = load ptr, ptr %t17 - %t19 = call i32 @fn_str_eq(ptr %t18, ptr @.str2009) + %t19 = call i32 @fn_str_eq(ptr %t18, ptr @.str3843) %t20 = icmp ne i32 %t19, 0 %t21 = zext i1 %t20 to i32 store i32 %t21, ptr %t8 @@ -28027,20 +39188,20 @@ scend4: %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then5, label %ifend7 then5: - call void @fn_emit(ptr @.str2010) + call void @fn_emit(ptr @.str3844) %t24 = load ptr, ptr %t1 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str2011) + call void @fn_emit(ptr @.str3845) %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 @.str2012) + call void @fn_emit(ptr @.str3846) %t28 = load ptr, ptr %t0 %t29 = getelementptr inbounds %Cmp_Node, ptr %t28, i32 0, i32 1 %t30 = load ptr, ptr %t29 - %t31 = call ptr @fn_str_concat(ptr @.str2013, ptr %t30) - %t32 = call ptr @fn_str_concat(ptr %t31, ptr @.str2014) + %t31 = call ptr @fn_str_concat(ptr @.str3847, ptr %t30) + %t32 = call ptr @fn_str_concat(ptr %t31, ptr @.str3848) store ptr %t32, ptr %t33 %t34 = load ptr, ptr %t0 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 2 @@ -28053,8 +39214,8 @@ then8: %t40 = load ptr, ptr %t0 %t41 = getelementptr inbounds %Cmp_Node, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %t41 - %t43 = call ptr @fn_str_concat(ptr @.str2015, ptr %t42) - %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str2016) + %t43 = call ptr @fn_str_concat(ptr @.str3849, ptr %t42) + %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str3850) store ptr %t44, ptr %t33 br label %ifend10 ifend10: @@ -28065,10 +39226,10 @@ ifend10: %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then11, label %ifend13 then11: - call void @fn_emit(ptr @.str2017) + call void @fn_emit(ptr @.str3851) %t50 = load ptr, ptr %t33 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2018) + call void @fn_emit(ptr @.str3852) br label %ifend13 ifend13: br label %ret @@ -28090,30 +39251,30 @@ then14: store ptr %t62, ptr %t63 %t64 = call ptr @fn_nreg() store ptr %t64, ptr %t65 - call void @fn_emit(ptr @.str2019) + call void @fn_emit(ptr @.str3853) %t66 = load ptr, ptr %t65 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str2020) + call void @fn_emit(ptr @.str3854) %t67 = load ptr, ptr %t63 call void @fn_emit(ptr %t67) - call void @fn_emit(ptr @.str2021) + call void @fn_emit(ptr @.str3855) %t68 = load ptr, ptr %t0 %t69 = getelementptr inbounds %Cmp_Node, ptr %t68, i32 0, i32 1 %t70 = load ptr, ptr %t69 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str2022) + call void @fn_emit(ptr @.str3856) %t71 = load ptr, ptr %t61 %t72 = getelementptr inbounds %Cmp_Val, ptr %t71, i32 0, i32 0 %t73 = load ptr, ptr %t72 call void @fn_emit(ptr %t73) - call void @fn_emit(ptr @.str2023) - call void @fn_emit(ptr @.str2024) + call void @fn_emit(ptr @.str3857) + call void @fn_emit(ptr @.str3858) %t74 = load ptr, ptr %t1 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str2025) + call void @fn_emit(ptr @.str3859) %t75 = load ptr, ptr %t65 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str2026) + call void @fn_emit(ptr @.str3860) store ptr null, ptr %t76 %t77 = load ptr, ptr %t0 %t78 = getelementptr inbounds %Cmp_Node, ptr %t77, i32 0, i32 2 @@ -28147,37 +39308,37 @@ then20: store i32 %t95, ptr %t96 %t97 = call ptr @fn_nreg() store ptr %t97, ptr %t98 - call void @fn_emit(ptr @.str2027) + call void @fn_emit(ptr @.str3861) %t99 = load ptr, ptr %t98 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str2028) + call void @fn_emit(ptr @.str3862) %t100 = load ptr, ptr %t63 call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str2029) + call void @fn_emit(ptr @.str3863) %t101 = load ptr, ptr %t0 %t102 = getelementptr inbounds %Cmp_Node, ptr %t101, i32 0, i32 1 %t103 = load ptr, ptr %t102 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str2030) + call void @fn_emit(ptr @.str3864) %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Cmp_Node, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %t105 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str2031) + call void @fn_emit(ptr @.str3865) %t107 = load ptr, ptr %t61 %t108 = getelementptr inbounds %Cmp_Val, ptr %t107, i32 0, i32 0 %t109 = load ptr, ptr %t108 call void @fn_emit(ptr %t109) - call void @fn_emit(ptr @.str2032) - %t110 = call ptr @fn_emit_alloca(ptr @.str2033) + call void @fn_emit(ptr @.str3866) + %t110 = call ptr @fn_emit_alloca(ptr @.str3867) store ptr %t110, ptr %t111 - call void @fn_emit(ptr @.str2034) + call void @fn_emit(ptr @.str3868) %t112 = load ptr, ptr %t98 call void @fn_emit(ptr %t112) - call void @fn_emit(ptr @.str2035) + call void @fn_emit(ptr @.str3869) %t113 = load ptr, ptr %t111 call void @fn_emit(ptr %t113) - call void @fn_emit(ptr @.str2036) + call void @fn_emit(ptr @.str3870) %t114 = load ptr, ptr %t0 %t115 = getelementptr inbounds %Cmp_Node, ptr %t114, i32 0, i32 1 %t116 = load ptr, ptr %t115 @@ -28195,8 +39356,8 @@ ifend22: %t123 = load ptr, ptr %t0 %t124 = getelementptr inbounds %Cmp_Node, ptr %t123, i32 0, i32 1 %t125 = load ptr, ptr %t124 - %t126 = call ptr @fn_str_concat(ptr @.str2037, ptr %t125) - %t127 = call ptr @fn_str_concat(ptr %t126, ptr @.str2038) + %t126 = call ptr @fn_str_concat(ptr @.str3871, ptr %t125) + %t127 = call ptr @fn_str_concat(ptr %t126, ptr @.str3872) store ptr %t127, ptr %t128 %t129 = load ptr, ptr %t0 %t130 = getelementptr inbounds %Cmp_Node, ptr %t129, i32 0, i32 2 @@ -28209,8 +39370,8 @@ then23: %t135 = load ptr, ptr %t0 %t136 = getelementptr inbounds %Cmp_Node, ptr %t135, i32 0, i32 1 %t137 = load ptr, ptr %t136 - %t138 = call ptr @fn_str_concat(ptr @.str2039, ptr %t137) - %t139 = call ptr @fn_str_concat(ptr %t138, ptr @.str2040) + %t138 = call ptr @fn_str_concat(ptr @.str3873, ptr %t137) + %t139 = call ptr @fn_str_concat(ptr %t138, ptr @.str3874) store ptr %t139, ptr %t128 br label %ifend25 ifend25: @@ -28221,20 +39382,20 @@ ifend25: %t144 = icmp ne i32 %t143, 0 br i1 %t144, label %then26, label %ifend28 then26: - call void @fn_emit(ptr @.str2041) + call void @fn_emit(ptr @.str3875) %t145 = load ptr, ptr %t128 call void @fn_emit(ptr %t145) - call void @fn_emit(ptr @.str2042) + call void @fn_emit(ptr @.str3876) %t146 = load ptr, ptr %t61 %t147 = getelementptr inbounds %Cmp_Val, ptr %t146, i32 0, i32 0 %t148 = load ptr, ptr %t147 call void @fn_emit(ptr %t148) - call void @fn_emit(ptr @.str2043) + call void @fn_emit(ptr @.str3877) br label %ifend28 ifend28: br label %ifend16 else15: - store ptr @.str2044, ptr %t149 + store ptr @.str3878, ptr %t149 %t150 = load ptr, ptr %t0 %t151 = getelementptr inbounds %Cmp_Node, ptr %t150, i32 0, i32 1 %t152 = load ptr, ptr %t151 @@ -28242,20 +39403,20 @@ else15: %t154 = icmp ne i32 %t153, 0 br i1 %t154, label %then29, label %ifend31 then29: - store ptr @.str2045, ptr %t149 + store ptr @.str3879, ptr %t149 br label %ifend31 ifend31: - call void @fn_emit(ptr @.str2046) + call void @fn_emit(ptr @.str3880) %t155 = load ptr, ptr %t1 call void @fn_emit(ptr %t155) - call void @fn_emit(ptr @.str2047) + call void @fn_emit(ptr @.str3881) %t156 = load ptr, ptr %t149 call void @fn_emit(ptr %t156) %t157 = load ptr, ptr %t0 %t158 = getelementptr inbounds %Cmp_Node, ptr %t157, i32 0, i32 1 %t159 = load ptr, ptr %t158 call void @fn_emit(ptr %t159) - call void @fn_emit(ptr @.str2048) + call void @fn_emit(ptr @.str3882) br label %ifend16 ifend16: br label %ret @@ -28279,7 +39440,7 @@ entry: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str2049, ptr @g_ret_ty + store ptr @.str3883, ptr @g_ret_ty %t4 = call ptr @fn_buf_new() store ptr %t4, ptr %t5 %t6 = call ptr @fn_buf_new() @@ -28298,25 +39459,25 @@ entry: %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str2050) + call void @fn_emit(ptr @.str3884) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str2051) + call void @fn_emit(ptr @.str3885) %t17 = load ptr, ptr %t8 store ptr %t17, ptr @g_code - call void @fn_emit(ptr @.str2052) + call void @fn_emit(ptr @.str3886) %t18 = load ptr, ptr %t0 %t19 = getelementptr inbounds %Cmp_Node, ptr %t18, i32 0, i32 1 %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str2053) + call void @fn_emit(ptr @.str3887) %t21 = load ptr, ptr @g_falloc %t22 = call ptr @fn_buf_str(ptr %t21) call void @fn_emit(ptr %t22) %t23 = load ptr, ptr %t5 %t24 = call ptr @fn_buf_str(ptr %t23) call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str2054) + call void @fn_emit(ptr @.str3888) br label %ret ret: ret void @@ -28338,12 +39499,12 @@ entry: %t1 = load ptr, ptr %t0 %t2 = getelementptr inbounds %Cmp_Node, ptr %t1, i32 0, i32 1 %t3 = load ptr, ptr %t2 - %t4 = call ptr @fn_str_concat(ptr @.str2055, ptr %t3) + %t4 = call ptr @fn_str_concat(ptr @.str3889, ptr %t3) %t5 = call ptr @fn_emit_bind(ptr %t4) store ptr %t5, ptr %t6 %t7 = load ptr, ptr %t6 - %t8 = call ptr @fn_str_concat(ptr @.str2056, ptr %t7) - %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str2057) + %t8 = call ptr @fn_str_concat(ptr @.str3890, ptr %t7) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str3891) %t10 = call ptr @fn_emit_bind(ptr %t9) store ptr %t10, ptr %t11 %t13 = load ptr, ptr %t0 @@ -28376,17 +39537,17 @@ then2: %t32 = load ptr, ptr %t31 %t33 = getelementptr inbounds %Cmp_Node, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %t33 - %t35 = call ptr @fn_str_concat(ptr @.str2058, ptr %t34) + %t35 = call ptr @fn_str_concat(ptr @.str3892, 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 @.str2059, ptr %t38) - %t40 = call ptr @fn_str_concat(ptr %t39, ptr @.str2060) + %t39 = call ptr @fn_str_concat(ptr @.str3893, ptr %t38) + %t40 = call ptr @fn_str_concat(ptr %t39, ptr @.str3894) %t41 = call ptr @fn_emit_bind(ptr %t40) store ptr %t41, ptr %t42 %t43 = load ptr, ptr %t11 - %t44 = call ptr @fn_str_concat(ptr @.str2061, ptr %t43) - %t45 = call ptr @fn_str_concat(ptr %t44, ptr @.str2062) + %t44 = call ptr @fn_str_concat(ptr @.str3895, ptr %t43) + %t45 = call ptr @fn_str_concat(ptr %t44, ptr @.str3896) %t46 = load ptr, ptr %t42 %t47 = call ptr @fn_str_concat(ptr %t45, ptr %t46) %t48 = call ptr @fn_emit_bind(ptr %t47) @@ -28401,51 +39562,51 @@ ifend4: %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then5, label %ifend7 then5: - %t55 = call ptr @fn_emit_bind(ptr @.str2063) + %t55 = call ptr @fn_emit_bind(ptr @.str3897) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t56 - %t58 = call ptr @fn_str_concat(ptr @.str2064, ptr %t57) - %t59 = call ptr @fn_str_concat(ptr %t58, ptr @.str2065) + %t58 = call ptr @fn_str_concat(ptr @.str3898, ptr %t57) + %t59 = call ptr @fn_str_concat(ptr %t58, ptr @.str3899) %t60 = call ptr @fn_emit_bind(ptr %t59) store ptr %t60, ptr %t61 %t62 = load ptr, ptr %t11 - %t63 = call ptr @fn_str_concat(ptr @.str2066, ptr %t62) - %t64 = call ptr @fn_str_concat(ptr %t63, ptr @.str2067) + %t63 = call ptr @fn_str_concat(ptr @.str3900, ptr %t62) + %t64 = call ptr @fn_str_concat(ptr %t63, ptr @.str3901) %t65 = load ptr, ptr %t61 %t66 = call ptr @fn_str_concat(ptr %t64, ptr %t65) %t67 = call ptr @fn_emit_bind(ptr %t66) store ptr %t67, ptr %t11 br label %ifend7 ifend7: - %t68 = call ptr @fn_lbl(ptr @.str2068) + %t68 = call ptr @fn_lbl(ptr @.str3902) store ptr %t68, ptr %t69 - %t70 = call ptr @fn_lbl(ptr @.str2069) + %t70 = call ptr @fn_lbl(ptr @.str3903) store ptr %t70, ptr %t71 - call void @fn_emit(ptr @.str2070) + call void @fn_emit(ptr @.str3904) %t72 = load ptr, ptr %t11 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str2071) + call void @fn_emit(ptr @.str3905) %t73 = load ptr, ptr %t69 call void @fn_emit(ptr %t73) - call void @fn_emit(ptr @.str2072) + call void @fn_emit(ptr @.str3906) %t74 = load ptr, ptr %t71 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str2073) + call void @fn_emit(ptr @.str3907) %t75 = load ptr, ptr %t69 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str2074) + call void @fn_emit(ptr @.str3908) %t76 = load ptr, ptr %t0 %t77 = getelementptr inbounds %Cmp_Node, ptr %t76, i32 0, i32 1 %t78 = load ptr, ptr %t77 call void @fn_emit(ptr %t78) - call void @fn_emit(ptr @.str2075) - call void @fn_emit(ptr @.str2076) + call void @fn_emit(ptr @.str3909) + call void @fn_emit(ptr @.str3910) %t79 = load ptr, ptr %t71 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str2077) + call void @fn_emit(ptr @.str3911) %t80 = load ptr, ptr %t71 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str2078) + call void @fn_emit(ptr @.str3912) br label %ret ret: ret void @@ -28614,7 +39775,7 @@ wend12: then20: br label %ret ifend22: - %t96 = call ptr @fn_emit_bind(ptr @.str2079) + %t96 = call ptr @fn_emit_bind(ptr @.str3913) store ptr %t96, ptr %t97 store i32 0, ptr %t1 br label %wcond23 @@ -28676,8 +39837,8 @@ scend29: br i1 %t139, label %then30, label %ifend32 then30: %t140 = load ptr, ptr %t97 - %t141 = call ptr @fn_str_concat(ptr @.str2080, ptr %t140) - %t142 = call ptr @fn_str_concat(ptr %t141, ptr @.str2081) + %t141 = call ptr @fn_str_concat(ptr @.str3914, ptr %t140) + %t142 = call ptr @fn_str_concat(ptr %t141, ptr @.str3915) %t143 = load ptr, ptr %t111 %t144 = getelementptr inbounds %Cmp_Node, ptr %t143, i32 0, i32 6 %t145 = load ptr, ptr %t144 @@ -28687,32 +39848,32 @@ then30: %t149 = call ptr @fn_str_concat(ptr %t142, ptr %t148) %t150 = call ptr @fn_emit_bind(ptr %t149) store ptr %t150, ptr %t151 - %t152 = call ptr @fn_lbl(ptr @.str2082) + %t152 = call ptr @fn_lbl(ptr @.str3916) store ptr %t152, ptr %t153 - %t154 = call ptr @fn_lbl(ptr @.str2083) + %t154 = call ptr @fn_lbl(ptr @.str3917) store ptr %t154, ptr %t155 - call void @fn_emit(ptr @.str2084) + call void @fn_emit(ptr @.str3918) %t156 = load ptr, ptr %t151 call void @fn_emit(ptr %t156) - call void @fn_emit(ptr @.str2085) + call void @fn_emit(ptr @.str3919) %t157 = load ptr, ptr %t153 call void @fn_emit(ptr %t157) - call void @fn_emit(ptr @.str2086) + call void @fn_emit(ptr @.str3920) %t158 = load ptr, ptr %t155 call void @fn_emit(ptr %t158) - call void @fn_emit(ptr @.str2087) + call void @fn_emit(ptr @.str3921) %t159 = load ptr, ptr %t153 call void @fn_emit(ptr %t159) - call void @fn_emit(ptr @.str2088) + call void @fn_emit(ptr @.str3922) %t160 = load ptr, ptr %t111 call void @fn_emit_call_one(ptr %t160) - call void @fn_emit(ptr @.str2089) + call void @fn_emit(ptr @.str3923) %t161 = load ptr, ptr %t155 call void @fn_emit(ptr %t161) - call void @fn_emit(ptr @.str2090) + call void @fn_emit(ptr @.str3924) %t162 = load ptr, ptr %t155 call void @fn_emit(ptr %t162) - call void @fn_emit(ptr @.str2091) + call void @fn_emit(ptr @.str3925) br label %ifend32 ifend32: %t163 = load i32, ptr %t1 @@ -28743,7 +39904,7 @@ entry: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str2092, ptr @g_ret_ty + store ptr @.str3926, ptr @g_ret_ty %t3 = call ptr @fn_buf_new() store ptr %t3, ptr %t4 %t5 = call ptr @fn_buf_new() @@ -28763,8 +39924,8 @@ then0: br label %ifend2 ifend2: %t14 = load ptr, ptr %t0 - %t15 = call ptr @fn_str_concat(ptr @.str2093, ptr %t14) - %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str2094) + %t15 = call ptr @fn_str_concat(ptr @.str3927, ptr %t14) + %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str3928) %t17 = load ptr, ptr %t1 %t18 = call ptr @fn_str_concat(ptr %t16, ptr %t17) store ptr %t18, ptr %t19 @@ -28789,10 +39950,10 @@ scend4: %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then5, label %ifend7 then5: - call void @fn_emit(ptr @.str2095) + call void @fn_emit(ptr @.str3929) %t34 = load ptr, ptr %t19 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str2096) + call void @fn_emit(ptr @.str3930) br label %ifend7 ifend7: %t35 = load i32, ptr @g_g_term @@ -28801,26 +39962,26 @@ ifend7: %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then8, label %ifend10 then8: - call void @fn_emit(ptr @.str2097) + call void @fn_emit(ptr @.str3931) br label %ifend10 ifend10: - call void @fn_emit(ptr @.str2098) + call void @fn_emit(ptr @.str3932) %t39 = load ptr, ptr %t7 store ptr %t39, ptr @g_code - call void @fn_emit(ptr @.str2099) + call void @fn_emit(ptr @.str3933) %t40 = load ptr, ptr %t1 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str2100) + call void @fn_emit(ptr @.str3934) %t41 = load ptr, ptr %t0 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str2101) + call void @fn_emit(ptr @.str3935) %t42 = load ptr, ptr @g_falloc %t43 = call ptr @fn_buf_str(ptr %t42) call void @fn_emit(ptr %t43) %t44 = load ptr, ptr %t4 %t45 = call ptr @fn_buf_str(ptr %t44) call void @fn_emit(ptr %t45) - call void @fn_emit(ptr @.str2102) + call void @fn_emit(ptr @.str3936) br label %ret ret: ret void @@ -28857,14 +40018,14 @@ wbody1: %t19 = load ptr, ptr %t14 %t20 = getelementptr inbounds %Cmp_Node, ptr %t19, i32 0, i32 4 %t21 = load ptr, ptr %t20 - call void @fn_emit_scene_fn(ptr %t18, ptr @.str2103, ptr %t21) + call void @fn_emit_scene_fn(ptr %t18, ptr @.str3937, ptr %t21) %t22 = load ptr, ptr %t14 %t23 = getelementptr inbounds %Cmp_Node, ptr %t22, i32 0, i32 1 %t24 = load ptr, ptr %t23 %t25 = load ptr, ptr %t14 %t26 = getelementptr inbounds %Cmp_Node, ptr %t25, i32 0, i32 5 %t27 = load ptr, ptr %t26 - call void @fn_emit_scene_fn(ptr %t24, ptr @.str2104, ptr %t27) + call void @fn_emit_scene_fn(ptr %t24, ptr @.str3938, ptr %t27) %t28 = load i32, ptr %t0 %t29 = add i32 %t28, 1 store i32 %t29, ptr %t0 @@ -28913,7 +40074,7 @@ wbody1: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str2105, ptr @g_ret_ty + store ptr @.str3939, ptr @g_ret_ty %t20 = call ptr @fn_buf_new() store ptr %t20, ptr %t21 %t22 = call ptr @fn_buf_new() @@ -28930,21 +40091,21 @@ wbody1: %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then3, label %ifend5 then3: - %t32 = call ptr @fn_emit_alloca(ptr @.str2106) + %t32 = call ptr @fn_emit_alloca(ptr @.str3940) store ptr %t32, ptr %t33 - call void @fn_emit(ptr @.str2107) + call void @fn_emit(ptr @.str3941) %t34 = load ptr, ptr %t33 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str2108) + call void @fn_emit(ptr @.str3942) %t35 = load ptr, ptr %t14 %t36 = getelementptr inbounds %Cmp_Node, ptr %t35, i32 0, i32 3 %t37 = load ptr, ptr %t36 %t38 = load ptr, ptr %t33 - call void @fn_loc_push(ptr %t37, ptr %t38, ptr @.str2109) + call void @fn_loc_push(ptr %t37, ptr %t38, ptr @.str3943) br label %ifend5 ifend5: %t39 = load ptr, ptr %t19 - call void @fn_emit_bind_props(ptr %t39, ptr @.str2110) + call void @fn_emit_bind_props(ptr %t39, ptr @.str3944) %t40 = load ptr, ptr %t14 %t41 = getelementptr inbounds %Cmp_Node, ptr %t40, i32 0, i32 4 %t42 = load ptr, ptr %t41 @@ -28955,25 +40116,25 @@ ifend5: %t46 = icmp ne i32 %t45, 0 br i1 %t46, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str2111) + call void @fn_emit(ptr @.str3945) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str2112) + call void @fn_emit(ptr @.str3946) %t47 = load ptr, ptr %t24 store ptr %t47, ptr @g_code - call void @fn_emit(ptr @.str2113) + call void @fn_emit(ptr @.str3947) %t48 = load ptr, ptr %t14 %t49 = getelementptr inbounds %Cmp_Node, ptr %t48, i32 0, i32 1 %t50 = load ptr, ptr %t49 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2114) + call void @fn_emit(ptr @.str3948) %t51 = load ptr, ptr @g_falloc %t52 = call ptr @fn_buf_str(ptr %t51) call void @fn_emit(ptr %t52) %t53 = load ptr, ptr %t21 %t54 = call ptr @fn_buf_str(ptr %t53) call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str2115) + call void @fn_emit(ptr @.str3949) %t55 = load i32, ptr %t0 %t56 = add i32 %t55, 1 store i32 %t56, ptr %t0 @@ -29004,21 +40165,21 @@ then0: ifend2: %t6 = call ptr @fn_itoa(i32 1024) store ptr %t6, ptr %t7 - call void @fn_emit(ptr @.str2116) - call void @fn_emit(ptr @.str2117) - call void @fn_emit(ptr @.str2118) - call void @fn_emit(ptr @.str2119) - call void @fn_emit(ptr @.str2120) + call void @fn_emit(ptr @.str3950) + call void @fn_emit(ptr @.str3951) + call void @fn_emit(ptr @.str3952) + call void @fn_emit(ptr @.str3953) + call void @fn_emit(ptr @.str3954) %t8 = load ptr, ptr %t7 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str2121) - call void @fn_emit(ptr @.str2122) - call void @fn_emit(ptr @.str2123) - call void @fn_emit(ptr @.str2124) + call void @fn_emit(ptr @.str3955) + call void @fn_emit(ptr @.str3956) + call void @fn_emit(ptr @.str3957) + call void @fn_emit(ptr @.str3958) %t9 = load ptr, ptr %t7 call void @fn_emit(ptr %t9) - call void @fn_emit(ptr @.str2125) - call void @fn_emit(ptr @.str2126) + call void @fn_emit(ptr @.str3959) + call void @fn_emit(ptr @.str3960) store i32 0, ptr %t10 br label %wcond3 wcond3: @@ -29043,35 +40204,35 @@ wbody4: %t27 = load i32, ptr %t10 %t28 = call ptr @fn_itoa(i32 %t27) store ptr %t28, ptr %t29 - call void @fn_emit(ptr @.str2127) + call void @fn_emit(ptr @.str3961) %t30 = load ptr, ptr %t29 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str2128) + call void @fn_emit(ptr @.str3962) %t31 = load ptr, ptr %t26 %t32 = call i32 @fn_find_arch_id(ptr %t31) %t33 = call ptr @fn_itoa(i32 %t32) call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str2129) - call void @fn_emit(ptr @.str2130) + call void @fn_emit(ptr @.str3963) + call void @fn_emit(ptr @.str3964) %t34 = load ptr, ptr %t29 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str2131) + call void @fn_emit(ptr @.str3965) %t35 = load ptr, ptr %t29 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str2132) + call void @fn_emit(ptr @.str3966) %t36 = load ptr, ptr %t29 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str2133) - call void @fn_emit(ptr @.str2134) + call void @fn_emit(ptr @.str3967) + call void @fn_emit(ptr @.str3968) %t37 = load ptr, ptr %t29 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str2135) + call void @fn_emit(ptr @.str3969) %t38 = load ptr, ptr %t26 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str2136) + call void @fn_emit(ptr @.str3970) %t39 = load ptr, ptr %t26 - %t40 = call ptr @fn_str_concat(ptr @.str2137, ptr %t39) - %t41 = call ptr @fn_str_concat(ptr %t40, ptr @.str2138) + %t40 = call ptr @fn_str_concat(ptr @.str3971, ptr %t39) + %t41 = call ptr @fn_str_concat(ptr %t40, ptr @.str3972) store ptr %t41, ptr %t42 %t43 = load ptr, ptr %t42 %t44 = call ptr @fn_find_event(ptr %t43) @@ -29080,28 +40241,28 @@ wbody4: %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str2139) + call void @fn_emit(ptr @.str3973) %t48 = load ptr, ptr %t42 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str2140) + call void @fn_emit(ptr @.str3974) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str2141) + call void @fn_emit(ptr @.str3975) %t49 = load ptr, ptr %t29 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str2142) - call void @fn_emit(ptr @.str2143) + call void @fn_emit(ptr @.str3976) + call void @fn_emit(ptr @.str3977) %t50 = load ptr, ptr %t29 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2144) + call void @fn_emit(ptr @.str3978) %t51 = load i32, ptr %t10 %t52 = add i32 %t51, 1 store i32 %t52, ptr %t10 br label %wcond3 wend5: - call void @fn_emit(ptr @.str2145) - call void @fn_emit(ptr @.str2146) - call void @fn_emit(ptr @.str2147) + call void @fn_emit(ptr @.str3979) + call void @fn_emit(ptr @.str3980) + call void @fn_emit(ptr @.str3981) br label %ret ret: ret void @@ -29145,7 +40306,7 @@ entry: %t335 = alloca i32 %t351 = alloca ptr %t354 = alloca ptr - call void @fn_emith(ptr @.str2148) + call void @fn_emith(ptr @.str3982) store i32 0, ptr %t0 br label %wcond0 wcond0: @@ -29171,10 +40332,10 @@ wbody1: store ptr %t17, ptr %t18 %t19 = call ptr @fn_itoa(i32 16) store ptr %t19, ptr %t20 - call void @fn_emith(ptr @.str2149) + call void @fn_emith(ptr @.str3983) %t21 = load ptr, ptr %t18 call void @fn_emith(ptr %t21) - call void @fn_emith(ptr @.str2150) + call void @fn_emith(ptr @.str3984) store i32 0, ptr %t22 br label %wcond3 wcond3: @@ -29195,7 +40356,7 @@ wbody4: %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then6, label %ifend8 then6: - call void @fn_emith(ptr @.str2151) + call void @fn_emith(ptr @.str3985) br label %ifend8 ifend8: %t36 = load ptr, ptr %t14 @@ -29233,125 +40394,125 @@ then9: %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then12, label %ifend14 then12: - call void @fn_emith(ptr @.str2152) + call void @fn_emith(ptr @.str3986) br label %ifend14 ifend14: - call void @fn_emith(ptr @.str2153) + call void @fn_emith(ptr @.str3987) br label %ifend11 ifend11: - call void @fn_emith(ptr @.str2154) - call void @fn_emith(ptr @.str2155) + call void @fn_emith(ptr @.str3988) + call void @fn_emith(ptr @.str3989) %t63 = load ptr, ptr %t18 call void @fn_emith(ptr %t63) - call void @fn_emith(ptr @.str2156) + call void @fn_emith(ptr @.str3990) %t64 = load ptr, ptr %t20 call void @fn_emith(ptr %t64) - call void @fn_emith(ptr @.str2157) - call void @fn_emith(ptr @.str2158) + call void @fn_emith(ptr @.str3991) + call void @fn_emith(ptr @.str3992) %t65 = load ptr, ptr %t18 call void @fn_emith(ptr %t65) - call void @fn_emith(ptr @.str2159) - call void @fn_emith(ptr @.str2160) + call void @fn_emith(ptr @.str3993) + call void @fn_emith(ptr @.str3994) %t66 = load ptr, ptr %t18 call void @fn_emith(ptr %t66) - call void @fn_emith(ptr @.str2161) + call void @fn_emith(ptr @.str3995) %t67 = load ptr, ptr %t20 call void @fn_emith(ptr %t67) - call void @fn_emith(ptr @.str2162) - call void @fn_emit(ptr @.str2163) + call void @fn_emith(ptr @.str3996) + call void @fn_emit(ptr @.str3997) %t68 = load ptr, ptr %t18 call void @fn_emit(ptr %t68) - call void @fn_emit(ptr @.str2164) - call void @fn_emit(ptr @.str2165) + call void @fn_emit(ptr @.str3998) + call void @fn_emit(ptr @.str3999) %t69 = load ptr, ptr %t18 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str2166) - call void @fn_emit(ptr @.str2167) + call void @fn_emit(ptr @.str4000) + call void @fn_emit(ptr @.str4001) %t70 = load ptr, ptr %t20 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str2168) - call void @fn_emit(ptr @.str2169) - call void @fn_emit(ptr @.str2170) + call void @fn_emit(ptr @.str4002) + call void @fn_emit(ptr @.str4003) + call void @fn_emit(ptr @.str4004) %t71 = load ptr, ptr %t20 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str2171) + call void @fn_emit(ptr @.str4005) %t72 = load ptr, ptr %t18 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str2172) - call void @fn_emit(ptr @.str2173) - call void @fn_emit(ptr @.str2174) + call void @fn_emit(ptr @.str4006) + call void @fn_emit(ptr @.str4007) + call void @fn_emit(ptr @.str4008) %t73 = load ptr, ptr %t20 call void @fn_emit(ptr %t73) - call void @fn_emit(ptr @.str2175) + call void @fn_emit(ptr @.str4009) %t74 = load ptr, ptr %t18 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str2176) - call void @fn_emit(ptr @.str2177) - call void @fn_emit(ptr @.str2178) + call void @fn_emit(ptr @.str4010) + call void @fn_emit(ptr @.str4011) + call void @fn_emit(ptr @.str4012) %t75 = load ptr, ptr %t18 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str2179) - call void @fn_emit(ptr @.str2180) - call void @fn_emit(ptr @.str2181) + call void @fn_emit(ptr @.str4013) + call void @fn_emit(ptr @.str4014) + call void @fn_emit(ptr @.str4015) %t76 = load ptr, ptr %t18 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str2182) - call void @fn_emit(ptr @.str2183) + call void @fn_emit(ptr @.str4016) + call void @fn_emit(ptr @.str4017) %t77 = load ptr, ptr %t18 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str2184) - call void @fn_emit(ptr @.str2185) + call void @fn_emit(ptr @.str4018) + call void @fn_emit(ptr @.str4019) %t78 = load ptr, ptr %t20 call void @fn_emit(ptr %t78) - call void @fn_emit(ptr @.str2186) - call void @fn_emit(ptr @.str2187) - call void @fn_emit(ptr @.str2188) + call void @fn_emit(ptr @.str4020) + call void @fn_emit(ptr @.str4021) + call void @fn_emit(ptr @.str4022) %t79 = load ptr, ptr %t20 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str2189) + call void @fn_emit(ptr @.str4023) %t80 = load ptr, ptr %t18 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str2190) - call void @fn_emit(ptr @.str2191) - call void @fn_emit(ptr @.str2192) + call void @fn_emit(ptr @.str4024) + call void @fn_emit(ptr @.str4025) + call void @fn_emit(ptr @.str4026) %t81 = load ptr, ptr %t20 call void @fn_emit(ptr %t81) - call void @fn_emit(ptr @.str2193) + call void @fn_emit(ptr @.str4027) %t82 = load ptr, ptr %t18 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str2194) - call void @fn_emit(ptr @.str2195) - call void @fn_emit(ptr @.str2196) + call void @fn_emit(ptr @.str4028) + call void @fn_emit(ptr @.str4029) + call void @fn_emit(ptr @.str4030) %t83 = load ptr, ptr %t18 call void @fn_emit(ptr %t83) - call void @fn_emit(ptr @.str2197) - call void @fn_emit(ptr @.str2198) - call void @fn_emit(ptr @.str2199) + call void @fn_emit(ptr @.str4031) + call void @fn_emit(ptr @.str4032) + call void @fn_emit(ptr @.str4033) %t84 = load ptr, ptr %t18 call void @fn_emit(ptr %t84) - call void @fn_emit(ptr @.str2200) - call void @fn_emit(ptr @.str2201) + call void @fn_emit(ptr @.str4034) + call void @fn_emit(ptr @.str4035) %t85 = load ptr, ptr %t18 call void @fn_emit(ptr %t85) - call void @fn_emit(ptr @.str2202) - call void @fn_emit(ptr @.str2203) - call void @fn_emit(ptr @.str2204) - call void @fn_emit(ptr @.str2205) + call void @fn_emit(ptr @.str4036) + call void @fn_emit(ptr @.str4037) + call void @fn_emit(ptr @.str4038) + call void @fn_emit(ptr @.str4039) %t86 = load ptr, ptr %t20 call void @fn_emit(ptr %t86) - call void @fn_emit(ptr @.str2206) + call void @fn_emit(ptr @.str4040) %t87 = load ptr, ptr %t18 call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str2207) - call void @fn_emit(ptr @.str2208) - call void @fn_emit(ptr @.str2209) + call void @fn_emit(ptr @.str4041) + call void @fn_emit(ptr @.str4042) + call void @fn_emit(ptr @.str4043) store i32 0, ptr @g_ll_t store i32 0, ptr @g_ll_lbl store i32 0, ptr @g_g_term call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str2210, ptr @g_ret_ty + store ptr @.str4044, ptr @g_ret_ty %t88 = call ptr @fn_buf_new() store ptr %t88, ptr %t89 %t90 = call ptr @fn_buf_new() @@ -29360,13 +40521,13 @@ ifend11: store ptr %t91, ptr %t92 %t93 = load ptr, ptr %t89 store ptr %t93, ptr @g_code - call void @fn_emit(ptr @.str2211) - call void @fn_emit(ptr @.str2212) + call void @fn_emit(ptr @.str4045) + call void @fn_emit(ptr @.str4046) %t94 = call ptr @fn_itoa(i32 32) call void @fn_emit(ptr %t94) - call void @fn_emit(ptr @.str2213) - call void @fn_emit(ptr @.str2214) - call void @fn_emit(ptr @.str2215) + call void @fn_emit(ptr @.str4047) + call void @fn_emit(ptr @.str4048) + call void @fn_emit(ptr @.str4049) %t95 = load ptr, ptr %t14 %t96 = getelementptr inbounds %Cmp_Node, ptr %t95, i32 0, i32 2 %t97 = load i32, ptr %t96 @@ -29375,16 +40536,16 @@ ifend11: %t100 = icmp ne i32 %t99, 0 br i1 %t100, label %then15, label %else16 then15: - call void @fn_emit(ptr @.str2216) + call void @fn_emit(ptr @.str4050) br label %ifend17 else16: - call void @fn_emit(ptr @.str2217) + call void @fn_emit(ptr @.str4051) br label %ifend17 ifend17: - call void @fn_emit(ptr @.str2218) - call void @fn_emit(ptr @.str2219) + call void @fn_emit(ptr @.str4052) + call void @fn_emit(ptr @.str4053) %t101 = load ptr, ptr %t18 - %t102 = call ptr @fn_str_concat(ptr @.str2220, ptr %t101) + %t102 = call ptr @fn_str_concat(ptr @.str4054, ptr %t101) %t103 = call ptr @fn_emit_alloca(ptr %t102) store ptr %t103, ptr %t104 store i32 0, ptr %t105 @@ -29417,45 +40578,45 @@ wbody19: store ptr %t127, ptr %t128 %t129 = call ptr @fn_nreg() store ptr %t129, ptr %t130 - call void @fn_emit(ptr @.str2221) + call void @fn_emit(ptr @.str4055) %t131 = load ptr, ptr %t130 call void @fn_emit(ptr %t131) - call void @fn_emit(ptr @.str2222) + call void @fn_emit(ptr @.str4056) %t132 = load ptr, ptr %t18 call void @fn_emit(ptr %t132) - call void @fn_emit(ptr @.str2223) + call void @fn_emit(ptr @.str4057) %t133 = load ptr, ptr %t104 call void @fn_emit(ptr %t133) - call void @fn_emit(ptr @.str2224) + call void @fn_emit(ptr @.str4058) %t134 = load i32, ptr %t105 %t135 = call ptr @fn_itoa(i32 %t134) call void @fn_emit(ptr %t135) - call void @fn_emit(ptr @.str2225) - call void @fn_emit(ptr @.str2226) + call void @fn_emit(ptr @.str4059) + call void @fn_emit(ptr @.str4060) %t136 = load ptr, ptr %t128 call void @fn_emit(ptr %t136) - call void @fn_emit(ptr @.str2227) + call void @fn_emit(ptr @.str4061) %t137 = load i32, ptr %t105 %t138 = call ptr @fn_itoa(i32 %t137) call void @fn_emit(ptr %t138) - call void @fn_emit(ptr @.str2228) + call void @fn_emit(ptr @.str4062) %t139 = load ptr, ptr %t130 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str2229) + call void @fn_emit(ptr @.str4063) %t140 = load ptr, ptr %t128 %t141 = call ptr @fn_emit_alloca(ptr %t140) store ptr %t141, ptr %t142 - call void @fn_emit(ptr @.str2230) + call void @fn_emit(ptr @.str4064) %t143 = load ptr, ptr %t128 call void @fn_emit(ptr %t143) - call void @fn_emit(ptr @.str2231) + call void @fn_emit(ptr @.str4065) %t144 = load i32, ptr %t105 %t145 = call ptr @fn_itoa(i32 %t144) call void @fn_emit(ptr %t145) - call void @fn_emit(ptr @.str2232) + call void @fn_emit(ptr @.str4066) %t146 = load ptr, ptr %t142 call void @fn_emit(ptr %t146) - call void @fn_emit(ptr @.str2233) + call void @fn_emit(ptr @.str4067) %t147 = load ptr, ptr %t123 %t148 = getelementptr inbounds %Cmp_Node, ptr %t147, i32 0, i32 1 %t149 = load ptr, ptr %t148 @@ -29480,16 +40641,16 @@ wend20: then21: %t163 = call ptr @fn_nreg() store ptr %t163, ptr %t156 - call void @fn_emit(ptr @.str2234) + call void @fn_emit(ptr @.str4068) %t164 = load ptr, ptr %t156 call void @fn_emit(ptr %t164) - call void @fn_emit(ptr @.str2235) + call void @fn_emit(ptr @.str4069) %t165 = load ptr, ptr %t18 call void @fn_emit(ptr %t165) - call void @fn_emit(ptr @.str2236) + call void @fn_emit(ptr @.str4070) %t166 = load ptr, ptr %t104 call void @fn_emit(ptr %t166) - call void @fn_emit(ptr @.str2237) + call void @fn_emit(ptr @.str4071) %t167 = load ptr, ptr %t14 %t168 = getelementptr inbounds %Cmp_Node, ptr %t167, i32 0, i32 7 %t169 = load ptr, ptr %t168 @@ -29497,11 +40658,11 @@ then21: %t171 = load i32, ptr %t170 %t172 = call ptr @fn_itoa(i32 %t171) call void @fn_emit(ptr %t172) - call void @fn_emit(ptr @.str2238) - call void @fn_emit(ptr @.str2239) + call void @fn_emit(ptr @.str4072) + call void @fn_emit(ptr @.str4073) %t173 = load ptr, ptr %t156 call void @fn_emit(ptr %t173) - call void @fn_emit(ptr @.str2240) + call void @fn_emit(ptr @.str4074) %t174 = load ptr, ptr %t156 store ptr %t174, ptr @g_g_cancel_addr br label %ifend23 @@ -29558,132 +40719,132 @@ wend26: %t210 = icmp ne i32 %t209, 0 br i1 %t210, label %then30, label %ifend32 then30: - %t211 = call ptr @fn_emit_alloca(ptr @.str2241) + %t211 = call ptr @fn_emit_alloca(ptr @.str4075) store ptr %t211, ptr %t212 - call void @fn_emit(ptr @.str2242) + call void @fn_emit(ptr @.str4076) %t213 = load ptr, ptr %t212 call void @fn_emit(ptr %t213) - call void @fn_emit(ptr @.str2243) - %t214 = call ptr @fn_lbl(ptr @.str2244) + call void @fn_emit(ptr @.str4077) + %t214 = call ptr @fn_lbl(ptr @.str4078) store ptr %t214, ptr %t215 - %t216 = call ptr @fn_lbl(ptr @.str2245) + %t216 = call ptr @fn_lbl(ptr @.str4079) store ptr %t216, ptr %t217 - %t218 = call ptr @fn_lbl(ptr @.str2246) + %t218 = call ptr @fn_lbl(ptr @.str4080) store ptr %t218, ptr %t219 - call void @fn_emit(ptr @.str2247) + call void @fn_emit(ptr @.str4081) %t220 = load ptr, ptr %t215 call void @fn_emit(ptr %t220) - call void @fn_emit(ptr @.str2248) + call void @fn_emit(ptr @.str4082) %t221 = load ptr, ptr %t215 call void @fn_emit(ptr %t221) - call void @fn_emit(ptr @.str2249) + call void @fn_emit(ptr @.str4083) %t222 = load ptr, ptr %t212 - %t223 = call ptr @fn_str_concat(ptr @.str2250, ptr %t222) + %t223 = call ptr @fn_str_concat(ptr @.str4084, ptr %t222) %t224 = call ptr @fn_emit_bind(ptr %t223) store ptr %t224, ptr %t225 %t226 = load ptr, ptr %t18 - %t227 = call ptr @fn_str_concat(ptr @.str2251, ptr %t226) + %t227 = call ptr @fn_str_concat(ptr @.str4085, ptr %t226) %t228 = call ptr @fn_emit_bind(ptr %t227) store ptr %t228, ptr %t229 %t230 = load ptr, ptr %t225 - %t231 = call ptr @fn_str_concat(ptr @.str2252, ptr %t230) - %t232 = call ptr @fn_str_concat(ptr %t231, ptr @.str2253) + %t231 = call ptr @fn_str_concat(ptr @.str4086, ptr %t230) + %t232 = call ptr @fn_str_concat(ptr %t231, ptr @.str4087) %t233 = load ptr, ptr %t229 %t234 = call ptr @fn_str_concat(ptr %t232, ptr %t233) %t235 = call ptr @fn_emit_bind(ptr %t234) store ptr %t235, ptr %t236 - call void @fn_emit(ptr @.str2254) + call void @fn_emit(ptr @.str4088) %t237 = load ptr, ptr %t236 call void @fn_emit(ptr %t237) - call void @fn_emit(ptr @.str2255) + call void @fn_emit(ptr @.str4089) %t238 = load ptr, ptr %t217 call void @fn_emit(ptr %t238) - call void @fn_emit(ptr @.str2256) + call void @fn_emit(ptr @.str4090) %t239 = load ptr, ptr %t219 call void @fn_emit(ptr %t239) - call void @fn_emit(ptr @.str2257) + call void @fn_emit(ptr @.str4091) %t240 = load ptr, ptr %t217 call void @fn_emit(ptr %t240) - call void @fn_emit(ptr @.str2258) + call void @fn_emit(ptr @.str4092) %t241 = call ptr @fn_nreg() store ptr %t241, ptr %t242 - call void @fn_emit(ptr @.str2259) + call void @fn_emit(ptr @.str4093) %t243 = load ptr, ptr %t242 call void @fn_emit(ptr %t243) - call void @fn_emit(ptr @.str2260) + call void @fn_emit(ptr @.str4094) %t244 = load ptr, ptr %t20 call void @fn_emit(ptr %t244) - call void @fn_emit(ptr @.str2261) + call void @fn_emit(ptr @.str4095) %t245 = load ptr, ptr %t18 call void @fn_emit(ptr %t245) - call void @fn_emit(ptr @.str2262) + call void @fn_emit(ptr @.str4096) %t246 = load ptr, ptr %t225 call void @fn_emit(ptr %t246) - call void @fn_emit(ptr @.str2263) + call void @fn_emit(ptr @.str4097) %t247 = load ptr, ptr %t242 - %t248 = call ptr @fn_str_concat(ptr @.str2264, ptr %t247) + %t248 = call ptr @fn_str_concat(ptr @.str4098, ptr %t247) %t249 = call ptr @fn_emit_bind(ptr %t248) store ptr %t249, ptr %t250 %t251 = load ptr, ptr %t250 - %t252 = call ptr @fn_str_concat(ptr @.str2265, ptr %t251) - %t253 = call ptr @fn_str_concat(ptr %t252, ptr @.str2266) + %t252 = call ptr @fn_str_concat(ptr @.str4099, ptr %t251) + %t253 = call ptr @fn_str_concat(ptr %t252, ptr @.str4100) %t254 = call ptr @fn_emit_bind(ptr %t253) store ptr %t254, ptr %t255 - %t256 = call ptr @fn_lbl(ptr @.str2267) + %t256 = call ptr @fn_lbl(ptr @.str4101) store ptr %t256, ptr %t257 - %t258 = call ptr @fn_lbl(ptr @.str2268) + %t258 = call ptr @fn_lbl(ptr @.str4102) store ptr %t258, ptr %t259 - call void @fn_emit(ptr @.str2269) + call void @fn_emit(ptr @.str4103) %t260 = load ptr, ptr %t255 call void @fn_emit(ptr %t260) - call void @fn_emit(ptr @.str2270) + call void @fn_emit(ptr @.str4104) %t261 = load ptr, ptr %t259 call void @fn_emit(ptr %t261) - call void @fn_emit(ptr @.str2271) + call void @fn_emit(ptr @.str4105) %t262 = load ptr, ptr %t257 call void @fn_emit(ptr %t262) - call void @fn_emit(ptr @.str2272) + call void @fn_emit(ptr @.str4106) %t263 = load ptr, ptr %t257 call void @fn_emit(ptr %t263) - call void @fn_emit(ptr @.str2273) - call void @fn_emit(ptr @.str2274) + call void @fn_emit(ptr @.str4107) + call void @fn_emit(ptr @.str4108) %t264 = load ptr, ptr %t250 call void @fn_emit(ptr %t264) - call void @fn_emit(ptr @.str2275) + call void @fn_emit(ptr @.str4109) %t265 = load ptr, ptr %t104 call void @fn_emit(ptr %t265) - call void @fn_emit(ptr @.str2276) - call void @fn_emit(ptr @.str2277) + call void @fn_emit(ptr @.str4110) + call void @fn_emit(ptr @.str4111) %t266 = load ptr, ptr %t259 call void @fn_emit(ptr %t266) - call void @fn_emit(ptr @.str2278) + call void @fn_emit(ptr @.str4112) %t267 = load ptr, ptr %t259 call void @fn_emit(ptr %t267) - call void @fn_emit(ptr @.str2279) + call void @fn_emit(ptr @.str4113) %t268 = load ptr, ptr %t225 - %t269 = call ptr @fn_str_concat(ptr @.str2280, ptr %t268) - %t270 = call ptr @fn_str_concat(ptr %t269, ptr @.str2281) + %t269 = call ptr @fn_str_concat(ptr @.str4114, ptr %t268) + %t270 = call ptr @fn_str_concat(ptr %t269, ptr @.str4115) %t271 = call ptr @fn_emit_bind(ptr %t270) store ptr %t271, ptr %t272 - call void @fn_emit(ptr @.str2282) + call void @fn_emit(ptr @.str4116) %t273 = load ptr, ptr %t272 call void @fn_emit(ptr %t273) - call void @fn_emit(ptr @.str2283) + call void @fn_emit(ptr @.str4117) %t274 = load ptr, ptr %t212 call void @fn_emit(ptr %t274) - call void @fn_emit(ptr @.str2284) - call void @fn_emit(ptr @.str2285) + call void @fn_emit(ptr @.str4118) + call void @fn_emit(ptr @.str4119) %t275 = load ptr, ptr %t215 call void @fn_emit(ptr %t275) - call void @fn_emit(ptr @.str2286) + call void @fn_emit(ptr @.str4120) %t276 = load ptr, ptr %t219 call void @fn_emit(ptr %t276) - call void @fn_emit(ptr @.str2287) - call void @fn_emit(ptr @.str2288) + call void @fn_emit(ptr @.str4121) + call void @fn_emit(ptr @.str4122) br label %ifend32 ifend32: - call void @fn_emit(ptr @.str2289) - call void @fn_emit(ptr @.str2290) + call void @fn_emit(ptr @.str4123) + call void @fn_emit(ptr @.str4124) %t277 = load ptr, ptr %t14 %t278 = getelementptr inbounds %Cmp_Node, ptr %t277, i32 0, i32 2 %t279 = load i32, ptr %t278 @@ -29693,22 +40854,22 @@ ifend32: br i1 %t282, label %then33, label %else34 then33: %t283 = load ptr, ptr %t156 - %t284 = call ptr @fn_str_concat(ptr @.str2291, ptr %t283) + %t284 = call ptr @fn_str_concat(ptr @.str4125, ptr %t283) %t285 = call ptr @fn_emit_bind(ptr %t284) store ptr %t285, ptr %t286 - call void @fn_emit(ptr @.str2292) + call void @fn_emit(ptr @.str4126) %t287 = load ptr, ptr %t286 call void @fn_emit(ptr %t287) - call void @fn_emit(ptr @.str2293) + call void @fn_emit(ptr @.str4127) br label %ifend35 else34: - call void @fn_emit(ptr @.str2294) + call void @fn_emit(ptr @.str4128) br label %ifend35 ifend35: store ptr null, ptr @g_g_cancel_addr %t288 = load ptr, ptr %t92 store ptr %t288, ptr @g_code - store ptr @.str2295, ptr %t289 + store ptr @.str4129, ptr %t289 %t290 = load ptr, ptr %t14 %t291 = getelementptr inbounds %Cmp_Node, ptr %t290, i32 0, i32 2 %t292 = load i32, ptr %t291 @@ -29717,16 +40878,16 @@ ifend35: %t295 = icmp ne i32 %t294, 0 br i1 %t295, label %then36, label %ifend38 then36: - store ptr @.str2296, ptr %t289 + store ptr @.str4130, ptr %t289 br label %ifend38 ifend38: - call void @fn_emit(ptr @.str2297) + call void @fn_emit(ptr @.str4131) %t296 = load ptr, ptr %t289 call void @fn_emit(ptr %t296) - call void @fn_emit(ptr @.str2298) + call void @fn_emit(ptr @.str4132) %t297 = load ptr, ptr %t18 call void @fn_emit(ptr %t297) - call void @fn_emit(ptr @.str2299) + call void @fn_emit(ptr @.str4133) store i32 0, ptr %t298 br label %wcond39 wcond39: @@ -29747,7 +40908,7 @@ wbody40: %t311 = icmp ne i32 %t310, 0 br i1 %t311, label %then42, label %ifend44 then42: - call void @fn_emit(ptr @.str2300) + call void @fn_emit(ptr @.str4134) br label %ifend44 ifend44: %t312 = load ptr, ptr %t14 @@ -29762,7 +40923,7 @@ ifend44: %t321 = load ptr, ptr %t320 %t322 = call ptr @fn_llty(ptr %t321) call void @fn_emit(ptr %t322) - call void @fn_emit(ptr @.str2301) + call void @fn_emit(ptr @.str4135) %t323 = load i32, ptr %t298 %t324 = call ptr @fn_itoa(i32 %t323) call void @fn_emit(ptr %t324) @@ -29771,14 +40932,14 @@ ifend44: store i32 %t326, ptr %t298 br label %wcond39 wend41: - call void @fn_emit(ptr @.str2302) + call void @fn_emit(ptr @.str4136) %t327 = load ptr, ptr @g_falloc %t328 = call ptr @fn_buf_str(ptr %t327) call void @fn_emit(ptr %t328) %t329 = load ptr, ptr %t89 %t330 = call ptr @fn_buf_str(ptr %t329) call void @fn_emit(ptr %t330) - call void @fn_emit(ptr @.str2303) + call void @fn_emit(ptr @.str4137) %t331 = load i32, ptr %t0 %t332 = add i32 %t331, 1 store i32 %t332, ptr %t0 @@ -29786,7 +40947,7 @@ wend41: wend2: %t333 = call ptr @fn_itoa(i32 16) store ptr %t333, ptr %t334 - call void @fn_emit(ptr @.str2304) + call void @fn_emit(ptr @.str4138) store i32 0, ptr %t335 br label %wcond45 wcond45: @@ -29811,127 +40972,127 @@ wbody46: %t352 = load i32, ptr %t335 %t353 = call ptr @fn_itoa(i32 %t352) store ptr %t353, ptr %t354 - call void @fn_emit(ptr @.str2305) + call void @fn_emit(ptr @.str4139) %t355 = load ptr, ptr %t354 call void @fn_emit(ptr %t355) - call void @fn_emit(ptr @.str2306) - call void @fn_emit(ptr @.str2307) + call void @fn_emit(ptr @.str4140) + call void @fn_emit(ptr @.str4141) %t356 = load ptr, ptr %t354 call void @fn_emit(ptr %t356) - call void @fn_emit(ptr @.str2308) - call void @fn_emit(ptr @.str2309) + call void @fn_emit(ptr @.str4142) + call void @fn_emit(ptr @.str4143) %t357 = load ptr, ptr %t354 call void @fn_emit(ptr %t357) - call void @fn_emit(ptr @.str2310) + call void @fn_emit(ptr @.str4144) %t358 = load ptr, ptr %t351 call void @fn_emit(ptr %t358) - call void @fn_emit(ptr @.str2311) - call void @fn_emit(ptr @.str2312) + call void @fn_emit(ptr @.str4145) + call void @fn_emit(ptr @.str4146) %t359 = load ptr, ptr %t354 call void @fn_emit(ptr %t359) - call void @fn_emit(ptr @.str2313) + call void @fn_emit(ptr @.str4147) %t360 = load ptr, ptr %t354 call void @fn_emit(ptr %t360) - call void @fn_emit(ptr @.str2314) + call void @fn_emit(ptr @.str4148) %t361 = load ptr, ptr %t354 call void @fn_emit(ptr %t361) - call void @fn_emit(ptr @.str2315) - call void @fn_emit(ptr @.str2316) + call void @fn_emit(ptr @.str4149) + call void @fn_emit(ptr @.str4150) %t362 = load ptr, ptr %t354 call void @fn_emit(ptr %t362) - call void @fn_emit(ptr @.str2317) + call void @fn_emit(ptr @.str4151) %t363 = load ptr, ptr %t354 call void @fn_emit(ptr %t363) - call void @fn_emit(ptr @.str2318) + call void @fn_emit(ptr @.str4152) %t364 = load ptr, ptr %t354 call void @fn_emit(ptr %t364) - call void @fn_emit(ptr @.str2319) - call void @fn_emit(ptr @.str2320) + call void @fn_emit(ptr @.str4153) + call void @fn_emit(ptr @.str4154) %t365 = load ptr, ptr %t354 call void @fn_emit(ptr %t365) - call void @fn_emit(ptr @.str2321) - call void @fn_emit(ptr @.str2322) + call void @fn_emit(ptr @.str4155) + call void @fn_emit(ptr @.str4156) %t366 = load ptr, ptr %t354 call void @fn_emit(ptr %t366) - call void @fn_emit(ptr @.str2323) + call void @fn_emit(ptr @.str4157) %t367 = load ptr, ptr %t334 call void @fn_emit(ptr %t367) - call void @fn_emit(ptr @.str2324) + call void @fn_emit(ptr @.str4158) %t368 = load ptr, ptr %t351 call void @fn_emit(ptr %t368) - call void @fn_emit(ptr @.str2325) + call void @fn_emit(ptr @.str4159) %t369 = load ptr, ptr %t354 call void @fn_emit(ptr %t369) - call void @fn_emit(ptr @.str2326) - call void @fn_emit(ptr @.str2327) + call void @fn_emit(ptr @.str4160) + call void @fn_emit(ptr @.str4161) %t370 = load ptr, ptr %t354 call void @fn_emit(ptr %t370) - call void @fn_emit(ptr @.str2328) + call void @fn_emit(ptr @.str4162) %t371 = load ptr, ptr %t354 call void @fn_emit(ptr %t371) - call void @fn_emit(ptr @.str2329) - call void @fn_emit(ptr @.str2330) + call void @fn_emit(ptr @.str4163) + call void @fn_emit(ptr @.str4164) %t372 = load ptr, ptr %t354 call void @fn_emit(ptr %t372) - call void @fn_emit(ptr @.str2331) + call void @fn_emit(ptr @.str4165) %t373 = load ptr, ptr %t354 call void @fn_emit(ptr %t373) - call void @fn_emit(ptr @.str2332) - call void @fn_emit(ptr @.str2333) + call void @fn_emit(ptr @.str4166) + call void @fn_emit(ptr @.str4167) %t374 = load ptr, ptr %t354 call void @fn_emit(ptr %t374) - call void @fn_emit(ptr @.str2334) + call void @fn_emit(ptr @.str4168) %t375 = load ptr, ptr %t354 call void @fn_emit(ptr %t375) - call void @fn_emit(ptr @.str2335) + call void @fn_emit(ptr @.str4169) %t376 = load ptr, ptr %t354 call void @fn_emit(ptr %t376) - call void @fn_emit(ptr @.str2336) - call void @fn_emit(ptr @.str2337) + call void @fn_emit(ptr @.str4170) + call void @fn_emit(ptr @.str4171) %t377 = load ptr, ptr %t354 call void @fn_emit(ptr %t377) - call void @fn_emit(ptr @.str2338) - call void @fn_emit(ptr @.str2339) + call void @fn_emit(ptr @.str4172) + call void @fn_emit(ptr @.str4173) %t378 = load ptr, ptr %t354 call void @fn_emit(ptr %t378) - call void @fn_emit(ptr @.str2340) + call void @fn_emit(ptr @.str4174) %t379 = load ptr, ptr %t334 call void @fn_emit(ptr %t379) - call void @fn_emit(ptr @.str2341) + call void @fn_emit(ptr @.str4175) %t380 = load ptr, ptr %t351 call void @fn_emit(ptr %t380) - call void @fn_emit(ptr @.str2342) + call void @fn_emit(ptr @.str4176) %t381 = load ptr, ptr %t354 call void @fn_emit(ptr %t381) - call void @fn_emit(ptr @.str2343) - call void @fn_emit(ptr @.str2344) + call void @fn_emit(ptr @.str4177) + call void @fn_emit(ptr @.str4178) %t382 = load ptr, ptr %t354 call void @fn_emit(ptr %t382) - call void @fn_emit(ptr @.str2345) + call void @fn_emit(ptr @.str4179) %t383 = load ptr, ptr %t354 call void @fn_emit(ptr %t383) - call void @fn_emit(ptr @.str2346) - call void @fn_emit(ptr @.str2347) + call void @fn_emit(ptr @.str4180) + call void @fn_emit(ptr @.str4181) %t384 = load ptr, ptr %t354 call void @fn_emit(ptr %t384) - call void @fn_emit(ptr @.str2348) - call void @fn_emit(ptr @.str2349) + call void @fn_emit(ptr @.str4182) + call void @fn_emit(ptr @.str4183) %t385 = load ptr, ptr %t354 call void @fn_emit(ptr %t385) - call void @fn_emit(ptr @.str2350) + call void @fn_emit(ptr @.str4184) %t386 = load ptr, ptr %t354 call void @fn_emit(ptr %t386) - call void @fn_emit(ptr @.str2351) + call void @fn_emit(ptr @.str4185) %t387 = load ptr, ptr %t354 call void @fn_emit(ptr %t387) - call void @fn_emit(ptr @.str2352) + call void @fn_emit(ptr @.str4186) %t388 = load ptr, ptr %t354 call void @fn_emit(ptr %t388) - call void @fn_emit(ptr @.str2353) - call void @fn_emit(ptr @.str2354) + call void @fn_emit(ptr @.str4187) + call void @fn_emit(ptr @.str4188) %t389 = load ptr, ptr %t354 call void @fn_emit(ptr %t389) - call void @fn_emit(ptr @.str2355) + call void @fn_emit(ptr @.str4189) %t390 = load i32, ptr %t335 %t391 = add i32 %t390, 1 %t392 = load ptr, ptr @g_g_events @@ -29942,15 +41103,15 @@ wbody46: %t397 = icmp ne i32 %t396, 0 br i1 %t397, label %then48, label %else49 then48: - call void @fn_emit(ptr @.str2356) + call void @fn_emit(ptr @.str4190) %t398 = load i32, ptr %t335 %t399 = add i32 %t398, 1 %t400 = call ptr @fn_itoa(i32 %t399) call void @fn_emit(ptr %t400) - call void @fn_emit(ptr @.str2357) + call void @fn_emit(ptr @.str4191) br label %ifend50 else49: - call void @fn_emit(ptr @.str2358) + call void @fn_emit(ptr @.str4192) br label %ifend50 ifend50: %t401 = load i32, ptr %t335 @@ -29958,7 +41119,7 @@ ifend50: store i32 %t402, ptr %t335 br label %wcond45 wend47: - call void @fn_emit(ptr @.str2359) + call void @fn_emit(ptr @.str4193) br label %ret ret: ret void @@ -30004,7 +41165,7 @@ entry: %t565 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emith(ptr @.str2360) + call void @fn_emith(ptr @.str4194) store i32 0, ptr %t2 store i32 0, ptr %t3 br label %wcond0 @@ -30044,12 +41205,12 @@ wend2: %t26 = load i32, ptr %t2 %t27 = call ptr @fn_itoa(i32 %t26) store ptr %t27, ptr %t28 - call void @fn_emith(ptr @.str2361) - call void @fn_emith(ptr @.str2362) - call void @fn_emith(ptr @.str2363) - call void @fn_emith(ptr @.str2364) - call void @fn_emith(ptr @.str2365) - call void @fn_emit(ptr @.str2366) + call void @fn_emith(ptr @.str4195) + call void @fn_emith(ptr @.str4196) + call void @fn_emith(ptr @.str4197) + call void @fn_emith(ptr @.str4198) + call void @fn_emith(ptr @.str4199) + call void @fn_emit(ptr @.str4200) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond6 @@ -30089,41 +41250,41 @@ then9: %t59 = load i32, ptr %t29 %t60 = call ptr @fn_itoa(i32 %t59) store ptr %t60, ptr %t61 - call void @fn_emit(ptr @.str2367) + call void @fn_emit(ptr @.str4201) %t62 = load ptr, ptr %t61 call void @fn_emit(ptr %t62) - call void @fn_emit(ptr @.str2368) + call void @fn_emit(ptr @.str4202) %t63 = load ptr, ptr %t58 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str2369) - call void @fn_emit(ptr @.str2370) + call void @fn_emit(ptr @.str4203) + call void @fn_emit(ptr @.str4204) %t64 = load ptr, ptr %t61 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str2371) + call void @fn_emit(ptr @.str4205) %t65 = load ptr, ptr %t61 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str2372) - call void @fn_emit(ptr @.str2373) + call void @fn_emit(ptr @.str4206) + call void @fn_emit(ptr @.str4207) %t66 = load ptr, ptr %t61 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str2374) + call void @fn_emit(ptr @.str4208) %t67 = load ptr, ptr %t61 call void @fn_emit(ptr %t67) - call void @fn_emit(ptr @.str2375) + call void @fn_emit(ptr @.str4209) %t68 = load ptr, ptr %t61 call void @fn_emit(ptr %t68) - call void @fn_emit(ptr @.str2376) - call void @fn_emit(ptr @.str2377) + call void @fn_emit(ptr @.str4210) + call void @fn_emit(ptr @.str4211) %t69 = load ptr, ptr %t61 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str2378) + call void @fn_emit(ptr @.str4212) %t70 = load ptr, ptr %t61 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str2379) - call void @fn_emit(ptr @.str2380) + call void @fn_emit(ptr @.str4213) + call void @fn_emit(ptr @.str4214) %t71 = load ptr, ptr %t61 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str2381) + call void @fn_emit(ptr @.str4215) %t72 = load i32, ptr %t29 %t73 = add i32 %t72, 1 store i32 %t73, ptr %t29 @@ -30134,16 +41295,16 @@ ifend11: store i32 %t75, ptr %t30 br label %wcond6 wend8: - call void @fn_emit(ptr @.str2382) - call void @fn_emit(ptr @.str2383) - call void @fn_emit(ptr @.str2384) - call void @fn_emit(ptr @.str2385) + call void @fn_emit(ptr @.str4216) + call void @fn_emit(ptr @.str4217) + call void @fn_emit(ptr @.str4218) + call void @fn_emit(ptr @.str4219) %t76 = load ptr, ptr %t28 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str2386) - call void @fn_emit(ptr @.str2387) - call void @fn_emit(ptr @.str2388) - call void @fn_emit(ptr @.str2389) + call void @fn_emit(ptr @.str4220) + call void @fn_emit(ptr @.str4221) + call void @fn_emit(ptr @.str4222) + call void @fn_emit(ptr @.str4223) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond12 @@ -30180,27 +41341,27 @@ then15: %t102 = load i32, ptr %t29 %t103 = call ptr @fn_itoa(i32 %t102) store ptr %t103, ptr %t104 - call void @fn_emit(ptr @.str2390) + call void @fn_emit(ptr @.str4224) %t105 = load ptr, ptr %t104 call void @fn_emit(ptr %t105) - call void @fn_emit(ptr @.str2391) + call void @fn_emit(ptr @.str4225) %t106 = load ptr, ptr %t104 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str2392) - call void @fn_emit(ptr @.str2393) + call void @fn_emit(ptr @.str4226) + call void @fn_emit(ptr @.str4227) %t107 = load ptr, ptr %t104 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str2394) + call void @fn_emit(ptr @.str4228) %t108 = load ptr, ptr %t104 call void @fn_emit(ptr %t108) - call void @fn_emit(ptr @.str2395) + call void @fn_emit(ptr @.str4229) %t109 = load ptr, ptr %t104 call void @fn_emit(ptr %t109) - call void @fn_emit(ptr @.str2396) - call void @fn_emit(ptr @.str2397) + call void @fn_emit(ptr @.str4230) + call void @fn_emit(ptr @.str4231) %t110 = load ptr, ptr %t104 call void @fn_emit(ptr %t110) - call void @fn_emit(ptr @.str2398) + call void @fn_emit(ptr @.str4232) store i32 0, ptr %t111 br label %wcond18 wcond18: @@ -30228,57 +41389,57 @@ wbody19: %t131 = call ptr @fn_emit_str_const(ptr %t130) store ptr %t131, ptr %t132 %t133 = load ptr, ptr %t104 - %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str2399) + %t134 = call ptr @fn_str_concat(ptr %t133, ptr @.str4233) %t135 = load i32, ptr %t111 %t136 = call ptr @fn_itoa(i32 %t135) %t137 = call ptr @fn_str_concat(ptr %t134, ptr %t136) store ptr %t137, ptr %t138 - call void @fn_emit(ptr @.str2400) + call void @fn_emit(ptr @.str4234) %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str2401) + call void @fn_emit(ptr @.str4235) %t140 = load ptr, ptr %t132 call void @fn_emit(ptr %t140) - call void @fn_emit(ptr @.str2402) - call void @fn_emit(ptr @.str2403) + call void @fn_emit(ptr @.str4236) + call void @fn_emit(ptr @.str4237) %t141 = load ptr, ptr %t138 call void @fn_emit(ptr %t141) - call void @fn_emit(ptr @.str2404) + call void @fn_emit(ptr @.str4238) %t142 = load ptr, ptr %t138 call void @fn_emit(ptr %t142) - call void @fn_emit(ptr @.str2405) - call void @fn_emit(ptr @.str2406) + call void @fn_emit(ptr @.str4239) + call void @fn_emit(ptr @.str4240) %t143 = load ptr, ptr %t138 call void @fn_emit(ptr %t143) - call void @fn_emit(ptr @.str2407) + call void @fn_emit(ptr @.str4241) %t144 = load ptr, ptr %t138 call void @fn_emit(ptr %t144) - call void @fn_emit(ptr @.str2408) + call void @fn_emit(ptr @.str4242) %t145 = load ptr, ptr %t138 call void @fn_emit(ptr %t145) - call void @fn_emit(ptr @.str2409) - call void @fn_emit(ptr @.str2410) + call void @fn_emit(ptr @.str4243) + call void @fn_emit(ptr @.str4244) %t146 = load ptr, ptr %t138 call void @fn_emit(ptr %t146) - call void @fn_emit(ptr @.str2411) + call void @fn_emit(ptr @.str4245) %t147 = load i32, ptr %t111 %t148 = call ptr @fn_itoa(i32 %t147) call void @fn_emit(ptr %t148) - call void @fn_emit(ptr @.str2412) - call void @fn_emit(ptr @.str2413) + call void @fn_emit(ptr @.str4246) + call void @fn_emit(ptr @.str4247) %t149 = load ptr, ptr %t138 call void @fn_emit(ptr %t149) - call void @fn_emit(ptr @.str2414) + call void @fn_emit(ptr @.str4248) %t150 = load i32, ptr %t111 %t151 = add i32 %t150, 1 store i32 %t151, ptr %t111 br label %wcond18 wend20: - call void @fn_emit(ptr @.str2415) - call void @fn_emit(ptr @.str2416) + call void @fn_emit(ptr @.str4249) + call void @fn_emit(ptr @.str4250) %t152 = load ptr, ptr %t104 call void @fn_emit(ptr %t152) - call void @fn_emit(ptr @.str2417) + call void @fn_emit(ptr @.str4251) %t153 = load i32, ptr %t29 %t154 = add i32 %t153, 1 store i32 %t154, ptr %t29 @@ -30289,8 +41450,8 @@ ifend17: store i32 %t156, ptr %t30 br label %wcond12 wend14: - call void @fn_emit(ptr @.str2418) - call void @fn_emit(ptr @.str2419) + call void @fn_emit(ptr @.str4252) + call void @fn_emit(ptr @.str4253) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond21 @@ -30331,40 +41492,40 @@ then24: %t186 = load i32, ptr %t29 %t187 = call ptr @fn_itoa(i32 %t186) store ptr %t187, ptr %t188 - call void @fn_emit(ptr @.str2420) + call void @fn_emit(ptr @.str4254) %t189 = load ptr, ptr %t188 call void @fn_emit(ptr %t189) - call void @fn_emit(ptr @.str2421) + call void @fn_emit(ptr @.str4255) %t190 = load ptr, ptr %t188 call void @fn_emit(ptr %t190) - call void @fn_emit(ptr @.str2422) - call void @fn_emit(ptr @.str2423) + call void @fn_emit(ptr @.str4256) + call void @fn_emit(ptr @.str4257) %t191 = load ptr, ptr %t188 call void @fn_emit(ptr %t191) - call void @fn_emit(ptr @.str2424) + call void @fn_emit(ptr @.str4258) %t192 = load ptr, ptr %t188 call void @fn_emit(ptr %t192) - call void @fn_emit(ptr @.str2425) + call void @fn_emit(ptr @.str4259) %t193 = load ptr, ptr %t188 call void @fn_emit(ptr %t193) - call void @fn_emit(ptr @.str2426) - call void @fn_emit(ptr @.str2427) + call void @fn_emit(ptr @.str4260) + call void @fn_emit(ptr @.str4261) %t194 = load ptr, ptr %t188 call void @fn_emit(ptr %t194) - call void @fn_emit(ptr @.str2428) - call void @fn_emit(ptr @.str2429) + call void @fn_emit(ptr @.str4262) + call void @fn_emit(ptr @.str4263) %t195 = load ptr, ptr %t188 call void @fn_emit(ptr %t195) - call void @fn_emit(ptr @.str2430) + call void @fn_emit(ptr @.str4264) %t196 = load ptr, ptr %t1 call void @fn_emit(ptr %t196) - call void @fn_emit(ptr @.str2431) + call void @fn_emit(ptr @.str4265) %t197 = load ptr, ptr %t185 call void @fn_emit(ptr %t197) - call void @fn_emit(ptr @.str2432) + call void @fn_emit(ptr @.str4266) %t198 = load ptr, ptr %t185 call void @fn_emit(ptr %t198) - call void @fn_emit(ptr @.str2433) + call void @fn_emit(ptr @.str4267) store i32 0, ptr %t199 br label %wcond27 wcond27: @@ -30392,130 +41553,130 @@ wbody28: %t219 = call ptr @fn_llty(ptr %t218) store ptr %t219, ptr %t220 %t221 = load ptr, ptr %t188 - %t222 = call ptr @fn_str_concat(ptr %t221, ptr @.str2434) + %t222 = call ptr @fn_str_concat(ptr %t221, ptr @.str4268) %t223 = load i32, ptr %t199 %t224 = call ptr @fn_itoa(i32 %t223) %t225 = call ptr @fn_str_concat(ptr %t222, ptr %t224) store ptr %t225, ptr %t226 - call void @fn_emit(ptr @.str2435) + call void @fn_emit(ptr @.str4269) %t227 = load ptr, ptr %t226 call void @fn_emit(ptr %t227) - call void @fn_emit(ptr @.str2436) + call void @fn_emit(ptr @.str4270) %t228 = load i32, ptr %t199 %t229 = call ptr @fn_itoa(i32 %t228) call void @fn_emit(ptr %t229) - call void @fn_emit(ptr @.str2437) - call void @fn_emit(ptr @.str2438) + call void @fn_emit(ptr @.str4271) + call void @fn_emit(ptr @.str4272) %t230 = load ptr, ptr %t226 call void @fn_emit(ptr %t230) - call void @fn_emit(ptr @.str2439) + call void @fn_emit(ptr @.str4273) %t231 = load ptr, ptr %t226 call void @fn_emit(ptr %t231) - call void @fn_emit(ptr @.str2440) + call void @fn_emit(ptr @.str4274) %t232 = load ptr, ptr %t226 call void @fn_emit(ptr %t232) - call void @fn_emit(ptr @.str2441) - call void @fn_emit(ptr @.str2442) + call void @fn_emit(ptr @.str4275) + call void @fn_emit(ptr @.str4276) %t233 = load ptr, ptr %t226 call void @fn_emit(ptr %t233) - call void @fn_emit(ptr @.str2443) - call void @fn_emit(ptr @.str2444) + call void @fn_emit(ptr @.str4277) + call void @fn_emit(ptr @.str4278) %t234 = load ptr, ptr %t226 call void @fn_emit(ptr %t234) - call void @fn_emit(ptr @.str2445) + call void @fn_emit(ptr @.str4279) %t235 = load ptr, ptr %t185 call void @fn_emit(ptr %t235) - call void @fn_emit(ptr @.str2446) + call void @fn_emit(ptr @.str4280) %t236 = load ptr, ptr %t188 call void @fn_emit(ptr %t236) - call void @fn_emit(ptr @.str2447) + call void @fn_emit(ptr @.str4281) %t237 = load i32, ptr %t199 %t238 = call ptr @fn_itoa(i32 %t237) call void @fn_emit(ptr %t238) - call void @fn_emit(ptr @.str2448) + call void @fn_emit(ptr @.str4282) %t239 = load ptr, ptr %t220 - %t240 = call i32 @fn_str_eq(ptr %t239, ptr @.str2449) + %t240 = call i32 @fn_str_eq(ptr %t239, ptr @.str4283) %t241 = icmp ne i32 %t240, 0 br i1 %t241, label %then30, label %else31 then30: - call void @fn_emit(ptr @.str2450) + call void @fn_emit(ptr @.str4284) %t242 = load ptr, ptr %t226 call void @fn_emit(ptr %t242) - call void @fn_emit(ptr @.str2451) + call void @fn_emit(ptr @.str4285) %t243 = load ptr, ptr %t226 call void @fn_emit(ptr %t243) - call void @fn_emit(ptr @.str2452) - call void @fn_emit(ptr @.str2453) + call void @fn_emit(ptr @.str4286) + call void @fn_emit(ptr @.str4287) %t244 = load ptr, ptr %t226 call void @fn_emit(ptr %t244) - call void @fn_emit(ptr @.str2454) + call void @fn_emit(ptr @.str4288) %t245 = load ptr, ptr %t226 call void @fn_emit(ptr %t245) - call void @fn_emit(ptr @.str2455) + call void @fn_emit(ptr @.str4289) %t246 = load ptr, ptr %t226 call void @fn_emit(ptr %t246) - call void @fn_emit(ptr @.str2456) + call void @fn_emit(ptr @.str4290) br label %ifend32 else31: %t247 = load ptr, ptr %t220 - %t248 = call i32 @fn_str_eq(ptr %t247, ptr @.str2457) + %t248 = call i32 @fn_str_eq(ptr %t247, ptr @.str4291) %t249 = icmp ne i32 %t248, 0 br i1 %t249, label %then33, label %else34 then33: - call void @fn_emit(ptr @.str2458) + call void @fn_emit(ptr @.str4292) %t250 = load ptr, ptr %t226 call void @fn_emit(ptr %t250) - call void @fn_emit(ptr @.str2459) + call void @fn_emit(ptr @.str4293) %t251 = load ptr, ptr %t226 call void @fn_emit(ptr %t251) - call void @fn_emit(ptr @.str2460) - call void @fn_emit(ptr @.str2461) + call void @fn_emit(ptr @.str4294) + call void @fn_emit(ptr @.str4295) %t252 = load ptr, ptr %t226 call void @fn_emit(ptr %t252) - call void @fn_emit(ptr @.str2462) + call void @fn_emit(ptr @.str4296) %t253 = load ptr, ptr %t226 call void @fn_emit(ptr %t253) - call void @fn_emit(ptr @.str2463) + call void @fn_emit(ptr @.str4297) %t254 = load ptr, ptr %t226 call void @fn_emit(ptr %t254) - call void @fn_emit(ptr @.str2464) + call void @fn_emit(ptr @.str4298) br label %ifend35 else34: - call void @fn_emit(ptr @.str2465) + call void @fn_emit(ptr @.str4299) %t255 = load ptr, ptr %t226 call void @fn_emit(ptr %t255) - call void @fn_emit(ptr @.str2466) + call void @fn_emit(ptr @.str4300) %t256 = load ptr, ptr %t226 call void @fn_emit(ptr %t256) - call void @fn_emit(ptr @.str2467) - call void @fn_emit(ptr @.str2468) + call void @fn_emit(ptr @.str4301) + call void @fn_emit(ptr @.str4302) %t257 = load ptr, ptr %t226 call void @fn_emit(ptr %t257) - call void @fn_emit(ptr @.str2469) + call void @fn_emit(ptr @.str4303) %t258 = load ptr, ptr %t226 call void @fn_emit(ptr %t258) - call void @fn_emit(ptr @.str2470) + call void @fn_emit(ptr @.str4304) %t259 = load ptr, ptr %t226 call void @fn_emit(ptr %t259) - call void @fn_emit(ptr @.str2471) + call void @fn_emit(ptr @.str4305) br label %ifend35 ifend35: br label %ifend32 ifend32: - call void @fn_emit(ptr @.str2472) + call void @fn_emit(ptr @.str4306) %t260 = load ptr, ptr %t226 call void @fn_emit(ptr %t260) - call void @fn_emit(ptr @.str2473) + call void @fn_emit(ptr @.str4307) %t261 = load i32, ptr %t199 %t262 = add i32 %t261, 1 store i32 %t262, ptr %t199 br label %wcond27 wend29: - call void @fn_emit(ptr @.str2474) - call void @fn_emit(ptr @.str2475) + call void @fn_emit(ptr @.str4308) + call void @fn_emit(ptr @.str4309) %t263 = load ptr, ptr %t188 call void @fn_emit(ptr %t263) - call void @fn_emit(ptr @.str2476) + call void @fn_emit(ptr @.str4310) %t264 = load i32, ptr %t29 %t265 = add i32 %t264, 1 store i32 %t265, ptr %t29 @@ -30526,16 +41687,16 @@ ifend26: store i32 %t267, ptr %t30 br label %wcond21 wend23: - call void @fn_emit(ptr @.str2477) + call void @fn_emit(ptr @.str4311) %t268 = load ptr, ptr %t28 call void @fn_emit(ptr %t268) - call void @fn_emit(ptr @.str2478) - call void @fn_emit(ptr @.str2479) - call void @fn_emit(ptr @.str2480) - call void @fn_emit(ptr @.str2481) - call void @fn_emit(ptr @.str2482) - call void @fn_emit(ptr @.str2483) - call void @fn_emit(ptr @.str2484) + call void @fn_emit(ptr @.str4312) + call void @fn_emit(ptr @.str4313) + call void @fn_emit(ptr @.str4314) + call void @fn_emit(ptr @.str4315) + call void @fn_emit(ptr @.str4316) + call void @fn_emit(ptr @.str4317) + call void @fn_emit(ptr @.str4318) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond36 @@ -30576,40 +41737,40 @@ then39: %t298 = load i32, ptr %t29 %t299 = call ptr @fn_itoa(i32 %t298) store ptr %t299, ptr %t300 - call void @fn_emit(ptr @.str2485) + call void @fn_emit(ptr @.str4319) %t301 = load ptr, ptr %t300 call void @fn_emit(ptr %t301) - call void @fn_emit(ptr @.str2486) + call void @fn_emit(ptr @.str4320) %t302 = load ptr, ptr %t300 call void @fn_emit(ptr %t302) - call void @fn_emit(ptr @.str2487) - call void @fn_emit(ptr @.str2488) + call void @fn_emit(ptr @.str4321) + call void @fn_emit(ptr @.str4322) %t303 = load ptr, ptr %t300 call void @fn_emit(ptr %t303) - call void @fn_emit(ptr @.str2489) + call void @fn_emit(ptr @.str4323) %t304 = load ptr, ptr %t300 call void @fn_emit(ptr %t304) - call void @fn_emit(ptr @.str2490) + call void @fn_emit(ptr @.str4324) %t305 = load ptr, ptr %t300 call void @fn_emit(ptr %t305) - call void @fn_emit(ptr @.str2491) - call void @fn_emit(ptr @.str2492) + call void @fn_emit(ptr @.str4325) + call void @fn_emit(ptr @.str4326) %t306 = load ptr, ptr %t300 call void @fn_emit(ptr %t306) - call void @fn_emit(ptr @.str2493) - call void @fn_emit(ptr @.str2494) + call void @fn_emit(ptr @.str4327) + call void @fn_emit(ptr @.str4328) %t307 = load ptr, ptr %t300 call void @fn_emit(ptr %t307) - call void @fn_emit(ptr @.str2495) + call void @fn_emit(ptr @.str4329) %t308 = load ptr, ptr %t1 call void @fn_emit(ptr %t308) - call void @fn_emit(ptr @.str2496) + call void @fn_emit(ptr @.str4330) %t309 = load ptr, ptr %t297 call void @fn_emit(ptr %t309) - call void @fn_emit(ptr @.str2497) + call void @fn_emit(ptr @.str4331) %t310 = load ptr, ptr %t297 call void @fn_emit(ptr %t310) - call void @fn_emit(ptr @.str2498) + call void @fn_emit(ptr @.str4332) store i32 0, ptr %t311 br label %wcond42 wcond42: @@ -30637,112 +41798,112 @@ wbody43: %t331 = call ptr @fn_llty(ptr %t330) store ptr %t331, ptr %t332 %t333 = load ptr, ptr %t300 - %t334 = call ptr @fn_str_concat(ptr %t333, ptr @.str2499) + %t334 = call ptr @fn_str_concat(ptr %t333, ptr @.str4333) %t335 = load i32, ptr %t311 %t336 = call ptr @fn_itoa(i32 %t335) %t337 = call ptr @fn_str_concat(ptr %t334, ptr %t336) store ptr %t337, ptr %t338 - call void @fn_emit(ptr @.str2500) + call void @fn_emit(ptr @.str4334) %t339 = load ptr, ptr %t338 call void @fn_emit(ptr %t339) - call void @fn_emit(ptr @.str2501) + call void @fn_emit(ptr @.str4335) %t340 = load i32, ptr %t311 %t341 = call ptr @fn_itoa(i32 %t340) call void @fn_emit(ptr %t341) - call void @fn_emit(ptr @.str2502) - call void @fn_emit(ptr @.str2503) + call void @fn_emit(ptr @.str4336) + call void @fn_emit(ptr @.str4337) %t342 = load ptr, ptr %t338 call void @fn_emit(ptr %t342) - call void @fn_emit(ptr @.str2504) + call void @fn_emit(ptr @.str4338) %t343 = load ptr, ptr %t338 call void @fn_emit(ptr %t343) - call void @fn_emit(ptr @.str2505) + call void @fn_emit(ptr @.str4339) %t344 = load ptr, ptr %t338 call void @fn_emit(ptr %t344) - call void @fn_emit(ptr @.str2506) - call void @fn_emit(ptr @.str2507) + call void @fn_emit(ptr @.str4340) + call void @fn_emit(ptr @.str4341) %t345 = load ptr, ptr %t338 call void @fn_emit(ptr %t345) - call void @fn_emit(ptr @.str2508) - call void @fn_emit(ptr @.str2509) + call void @fn_emit(ptr @.str4342) + call void @fn_emit(ptr @.str4343) %t346 = load ptr, ptr %t338 call void @fn_emit(ptr %t346) - call void @fn_emit(ptr @.str2510) + call void @fn_emit(ptr @.str4344) %t347 = load ptr, ptr %t297 call void @fn_emit(ptr %t347) - call void @fn_emit(ptr @.str2511) + call void @fn_emit(ptr @.str4345) %t348 = load ptr, ptr %t300 call void @fn_emit(ptr %t348) - call void @fn_emit(ptr @.str2512) + call void @fn_emit(ptr @.str4346) %t349 = load i32, ptr %t311 %t350 = call ptr @fn_itoa(i32 %t349) call void @fn_emit(ptr %t350) - call void @fn_emit(ptr @.str2513) + call void @fn_emit(ptr @.str4347) %t351 = load ptr, ptr %t332 - %t352 = call i32 @fn_str_eq(ptr %t351, ptr @.str2514) + %t352 = call i32 @fn_str_eq(ptr %t351, ptr @.str4348) %t353 = icmp ne i32 %t352, 0 br i1 %t353, label %then45, label %else46 then45: - call void @fn_emit(ptr @.str2515) + call void @fn_emit(ptr @.str4349) %t354 = load ptr, ptr %t338 call void @fn_emit(ptr %t354) - call void @fn_emit(ptr @.str2516) - call void @fn_emit(ptr @.str2517) + call void @fn_emit(ptr @.str4350) + call void @fn_emit(ptr @.str4351) %t355 = load ptr, ptr %t338 call void @fn_emit(ptr %t355) - call void @fn_emit(ptr @.str2518) + call void @fn_emit(ptr @.str4352) %t356 = load ptr, ptr %t338 call void @fn_emit(ptr %t356) - call void @fn_emit(ptr @.str2519) + call void @fn_emit(ptr @.str4353) br label %ifend47 else46: %t357 = load ptr, ptr %t332 - %t358 = call i32 @fn_str_eq(ptr %t357, ptr @.str2520) + %t358 = call i32 @fn_str_eq(ptr %t357, ptr @.str4354) %t359 = icmp ne i32 %t358, 0 br i1 %t359, label %then48, label %else49 then48: - call void @fn_emit(ptr @.str2521) + call void @fn_emit(ptr @.str4355) %t360 = load ptr, ptr %t338 call void @fn_emit(ptr %t360) - call void @fn_emit(ptr @.str2522) - call void @fn_emit(ptr @.str2523) + call void @fn_emit(ptr @.str4356) + call void @fn_emit(ptr @.str4357) %t361 = load ptr, ptr %t338 call void @fn_emit(ptr %t361) - call void @fn_emit(ptr @.str2524) + call void @fn_emit(ptr @.str4358) %t362 = load ptr, ptr %t338 call void @fn_emit(ptr %t362) - call void @fn_emit(ptr @.str2525) + call void @fn_emit(ptr @.str4359) br label %ifend50 else49: - call void @fn_emit(ptr @.str2526) + call void @fn_emit(ptr @.str4360) %t363 = load ptr, ptr %t338 call void @fn_emit(ptr %t363) - call void @fn_emit(ptr @.str2527) - call void @fn_emit(ptr @.str2528) + call void @fn_emit(ptr @.str4361) + call void @fn_emit(ptr @.str4362) %t364 = load ptr, ptr %t338 call void @fn_emit(ptr %t364) - call void @fn_emit(ptr @.str2529) + call void @fn_emit(ptr @.str4363) %t365 = load ptr, ptr %t338 call void @fn_emit(ptr %t365) - call void @fn_emit(ptr @.str2530) + call void @fn_emit(ptr @.str4364) br label %ifend50 ifend50: br label %ifend47 ifend47: - call void @fn_emit(ptr @.str2531) + call void @fn_emit(ptr @.str4365) %t366 = load ptr, ptr %t338 call void @fn_emit(ptr %t366) - call void @fn_emit(ptr @.str2532) + call void @fn_emit(ptr @.str4366) %t367 = load i32, ptr %t311 %t368 = add i32 %t367, 1 store i32 %t368, ptr %t311 br label %wcond42 wend44: - call void @fn_emit(ptr @.str2533) - call void @fn_emit(ptr @.str2534) + call void @fn_emit(ptr @.str4367) + call void @fn_emit(ptr @.str4368) %t369 = load ptr, ptr %t300 call void @fn_emit(ptr %t369) - call void @fn_emit(ptr @.str2535) + call void @fn_emit(ptr @.str4369) %t370 = load i32, ptr %t29 %t371 = add i32 %t370, 1 store i32 %t371, ptr %t29 @@ -30753,16 +41914,16 @@ ifend41: store i32 %t373, ptr %t30 br label %wcond36 wend38: - call void @fn_emit(ptr @.str2536) + call void @fn_emit(ptr @.str4370) %t374 = load ptr, ptr %t28 call void @fn_emit(ptr %t374) - call void @fn_emit(ptr @.str2537) - call void @fn_emit(ptr @.str2538) - call void @fn_emit(ptr @.str2539) - call void @fn_emit(ptr @.str2540) - call void @fn_emit(ptr @.str2541) - call void @fn_emit(ptr @.str2542) - call void @fn_emit(ptr @.str2543) + call void @fn_emit(ptr @.str4371) + call void @fn_emit(ptr @.str4372) + call void @fn_emit(ptr @.str4373) + call void @fn_emit(ptr @.str4374) + call void @fn_emit(ptr @.str4375) + call void @fn_emit(ptr @.str4376) + call void @fn_emit(ptr @.str4377) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond51 @@ -30801,58 +41962,58 @@ then54: %t402 = load i32, ptr %t29 %t403 = call ptr @fn_itoa(i32 %t402) store ptr %t403, ptr %t404 - call void @fn_emit(ptr @.str2544) + call void @fn_emit(ptr @.str4378) %t405 = load ptr, ptr %t404 call void @fn_emit(ptr %t405) - call void @fn_emit(ptr @.str2545) + call void @fn_emit(ptr @.str4379) %t406 = load ptr, ptr %t404 call void @fn_emit(ptr %t406) - call void @fn_emit(ptr @.str2546) - call void @fn_emit(ptr @.str2547) + call void @fn_emit(ptr @.str4380) + call void @fn_emit(ptr @.str4381) %t407 = load ptr, ptr %t404 call void @fn_emit(ptr %t407) - call void @fn_emit(ptr @.str2548) + call void @fn_emit(ptr @.str4382) %t408 = load ptr, ptr %t404 call void @fn_emit(ptr %t408) - call void @fn_emit(ptr @.str2549) + call void @fn_emit(ptr @.str4383) %t409 = load ptr, ptr %t404 call void @fn_emit(ptr %t409) - call void @fn_emit(ptr @.str2550) - call void @fn_emit(ptr @.str2551) + call void @fn_emit(ptr @.str4384) + call void @fn_emit(ptr @.str4385) %t410 = load ptr, ptr %t404 call void @fn_emit(ptr %t410) - call void @fn_emit(ptr @.str2552) - call void @fn_emit(ptr @.str2553) + call void @fn_emit(ptr @.str4386) + call void @fn_emit(ptr @.str4387) %t411 = load ptr, ptr %t404 call void @fn_emit(ptr %t411) - call void @fn_emit(ptr @.str2554) + call void @fn_emit(ptr @.str4388) %t412 = load ptr, ptr %t1 call void @fn_emit(ptr %t412) - call void @fn_emit(ptr @.str2555) + call void @fn_emit(ptr @.str4389) %t413 = load ptr, ptr %t401 call void @fn_emit(ptr %t413) - call void @fn_emit(ptr @.str2556) - call void @fn_emit(ptr @.str2557) + call void @fn_emit(ptr @.str4390) + call void @fn_emit(ptr @.str4391) %t414 = load ptr, ptr %t404 call void @fn_emit(ptr %t414) - call void @fn_emit(ptr @.str2558) + call void @fn_emit(ptr @.str4392) %t415 = load ptr, ptr %t404 call void @fn_emit(ptr %t415) - call void @fn_emit(ptr @.str2559) - call void @fn_emit(ptr @.str2560) + call void @fn_emit(ptr @.str4393) + call void @fn_emit(ptr @.str4394) %t416 = load ptr, ptr %t404 call void @fn_emit(ptr %t416) - call void @fn_emit(ptr @.str2561) + call void @fn_emit(ptr @.str4395) %t417 = load ptr, ptr %t404 call void @fn_emit(ptr %t417) - call void @fn_emit(ptr @.str2562) + call void @fn_emit(ptr @.str4396) %t418 = load ptr, ptr %t404 call void @fn_emit(ptr %t418) - call void @fn_emit(ptr @.str2563) - call void @fn_emit(ptr @.str2564) + call void @fn_emit(ptr @.str4397) + call void @fn_emit(ptr @.str4398) %t419 = load ptr, ptr %t404 call void @fn_emit(ptr %t419) - call void @fn_emit(ptr @.str2565) + call void @fn_emit(ptr @.str4399) %t420 = load i32, ptr %t29 %t421 = add i32 %t420, 1 store i32 %t421, ptr %t29 @@ -30863,54 +42024,54 @@ ifend56: store i32 %t423, ptr %t30 br label %wcond51 wend53: - call void @fn_emit(ptr @.str2566) + call void @fn_emit(ptr @.str4400) %t424 = load ptr, ptr %t28 call void @fn_emit(ptr %t424) - call void @fn_emit(ptr @.str2567) - call void @fn_emit(ptr @.str2568) - call void @fn_emit(ptr @.str2569) - call void @fn_emit(ptr @.str2570) - call void @fn_emit(ptr @.str2571) - call void @fn_emit(ptr @.str2572) - call void @fn_emit(ptr @.str2573) + call void @fn_emit(ptr @.str4401) + call void @fn_emit(ptr @.str4402) + call void @fn_emit(ptr @.str4403) + call void @fn_emit(ptr @.str4404) + call void @fn_emit(ptr @.str4405) + call void @fn_emit(ptr @.str4406) + call void @fn_emit(ptr @.str4407) %t425 = load ptr, ptr %t1 call void @fn_emit(ptr %t425) - call void @fn_emit(ptr @.str2574) - call void @fn_emit(ptr @.str2575) - call void @fn_emit(ptr @.str2576) - call void @fn_emit(ptr @.str2577) + call void @fn_emit(ptr @.str4408) + call void @fn_emit(ptr @.str4409) + call void @fn_emit(ptr @.str4410) + call void @fn_emit(ptr @.str4411) %t426 = load ptr, ptr %t1 call void @fn_emit(ptr %t426) - call void @fn_emit(ptr @.str2578) + call void @fn_emit(ptr @.str4412) %t427 = load ptr, ptr %t1 call void @fn_emit(ptr %t427) - call void @fn_emit(ptr @.str2579) - call void @fn_emit(ptr @.str2580) - call void @fn_emit(ptr @.str2581) - call void @fn_emit(ptr @.str2582) - call void @fn_emit(ptr @.str2583) + call void @fn_emit(ptr @.str4413) + call void @fn_emit(ptr @.str4414) + call void @fn_emit(ptr @.str4415) + call void @fn_emit(ptr @.str4416) + call void @fn_emit(ptr @.str4417) %t428 = load ptr, ptr %t28 call void @fn_emit(ptr %t428) - call void @fn_emit(ptr @.str2584) - call void @fn_emit(ptr @.str2585) - call void @fn_emit(ptr @.str2586) - call void @fn_emit(ptr @.str2587) + call void @fn_emit(ptr @.str4418) + call void @fn_emit(ptr @.str4419) + call void @fn_emit(ptr @.str4420) + call void @fn_emit(ptr @.str4421) %t429 = load ptr, ptr %t28 call void @fn_emit(ptr %t429) - call void @fn_emit(ptr @.str2588) - call void @fn_emit(ptr @.str2589) - call void @fn_emit(ptr @.str2590) + call void @fn_emit(ptr @.str4422) + call void @fn_emit(ptr @.str4423) + call void @fn_emit(ptr @.str4424) %t430 = load ptr, ptr %t28 call void @fn_emit(ptr %t430) - call void @fn_emit(ptr @.str2591) - call void @fn_emit(ptr @.str2592) - call void @fn_emit(ptr @.str2593) - call void @fn_emit(ptr @.str2594) + call void @fn_emit(ptr @.str4425) + call void @fn_emit(ptr @.str4426) + call void @fn_emit(ptr @.str4427) + call void @fn_emit(ptr @.str4428) %t431 = load ptr, ptr %t1 call void @fn_emit(ptr %t431) - call void @fn_emit(ptr @.str2595) - call void @fn_emit(ptr @.str2596) - call void @fn_emit(ptr @.str2597) + call void @fn_emit(ptr @.str4429) + call void @fn_emit(ptr @.str4430) + call void @fn_emit(ptr @.str4431) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond57 @@ -30950,34 +42111,34 @@ then60: %t460 = load i32, ptr %t29 %t461 = call ptr @fn_itoa(i32 %t460) store ptr %t461, ptr %t462 - call void @fn_emit(ptr @.str2598) + call void @fn_emit(ptr @.str4432) %t463 = load ptr, ptr %t462 call void @fn_emit(ptr %t463) - call void @fn_emit(ptr @.str2599) + call void @fn_emit(ptr @.str4433) %t464 = load ptr, ptr %t459 call void @fn_emit(ptr %t464) - call void @fn_emit(ptr @.str2600) - call void @fn_emit(ptr @.str2601) + call void @fn_emit(ptr @.str4434) + call void @fn_emit(ptr @.str4435) %t465 = load ptr, ptr %t462 call void @fn_emit(ptr %t465) - call void @fn_emit(ptr @.str2602) + call void @fn_emit(ptr @.str4436) %t466 = load ptr, ptr %t462 call void @fn_emit(ptr %t466) - call void @fn_emit(ptr @.str2603) - call void @fn_emit(ptr @.str2604) + call void @fn_emit(ptr @.str4437) + call void @fn_emit(ptr @.str4438) %t467 = load ptr, ptr %t462 call void @fn_emit(ptr %t467) - call void @fn_emit(ptr @.str2605) + call void @fn_emit(ptr @.str4439) %t468 = load ptr, ptr %t462 call void @fn_emit(ptr %t468) - call void @fn_emit(ptr @.str2606) + call void @fn_emit(ptr @.str4440) %t469 = load ptr, ptr %t462 call void @fn_emit(ptr %t469) - call void @fn_emit(ptr @.str2607) - call void @fn_emit(ptr @.str2608) + call void @fn_emit(ptr @.str4441) + call void @fn_emit(ptr @.str4442) %t470 = load ptr, ptr %t462 call void @fn_emit(ptr %t470) - call void @fn_emit(ptr @.str2609) + call void @fn_emit(ptr @.str4443) %t471 = load ptr, ptr @g_prog %t472 = getelementptr inbounds %LSlice, ptr %t471, i32 0, i32 0 %t473 = load ptr, ptr %t472 @@ -30989,11 +42150,11 @@ then60: %t479 = call i32 @fn_find_arch_id(ptr %t478) %t480 = call ptr @fn_itoa(i32 %t479) call void @fn_emit(ptr %t480) - call void @fn_emit(ptr @.str2610) - call void @fn_emit(ptr @.str2611) + call void @fn_emit(ptr @.str4444) + call void @fn_emit(ptr @.str4445) %t481 = load ptr, ptr %t462 call void @fn_emit(ptr %t481) - call void @fn_emit(ptr @.str2612) + call void @fn_emit(ptr @.str4446) %t482 = load i32, ptr %t29 %t483 = add i32 %t482, 1 store i32 %t483, ptr %t29 @@ -31004,7 +42165,7 @@ ifend62: store i32 %t485, ptr %t30 br label %wcond57 wend59: - call void @fn_emit(ptr @.str2613) + call void @fn_emit(ptr @.str4447) store i32 0, ptr %t30 br label %wcond63 wcond63: @@ -31045,7 +42206,7 @@ then66: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str2614, ptr @g_ret_ty + store ptr @.str4448, ptr @g_ret_ty %t513 = call ptr @fn_buf_new() store ptr %t513, ptr %t514 %t515 = call ptr @fn_buf_new() @@ -31063,23 +42224,23 @@ then66: %t524 = load ptr, ptr %t520 %t525 = call ptr @fn_emit_spawn(ptr %t524) store ptr %t525, ptr %t526 - call void @fn_emit(ptr @.str2615) + call void @fn_emit(ptr @.str4449) %t527 = load ptr, ptr %t526 call void @fn_emit(ptr %t527) - call void @fn_emit(ptr @.str2616) + call void @fn_emit(ptr @.str4450) %t528 = load ptr, ptr %t517 store ptr %t528, ptr @g_code - call void @fn_emit(ptr @.str2617) + call void @fn_emit(ptr @.str4451) %t529 = load ptr, ptr %t512 call void @fn_emit(ptr %t529) - call void @fn_emit(ptr @.str2618) + call void @fn_emit(ptr @.str4452) %t530 = load ptr, ptr @g_falloc %t531 = call ptr @fn_buf_str(ptr %t530) call void @fn_emit(ptr %t531) %t532 = load ptr, ptr %t514 %t533 = call ptr @fn_buf_str(ptr %t532) call void @fn_emit(ptr %t533) - call void @fn_emit(ptr @.str2619) + call void @fn_emit(ptr @.str4453) br label %ifend68 ifend68: %t534 = load i32, ptr %t30 @@ -31087,7 +42248,7 @@ ifend68: store i32 %t535, ptr %t30 br label %wcond63 wend65: - call void @fn_emit(ptr @.str2620) + call void @fn_emit(ptr @.str4454) store i32 0, ptr %t29 store i32 0, ptr %t30 br label %wcond69 @@ -31126,42 +42287,42 @@ then72: %t563 = load i32, ptr %t29 %t564 = call ptr @fn_itoa(i32 %t563) store ptr %t564, ptr %t565 - call void @fn_emit(ptr @.str2621) + call void @fn_emit(ptr @.str4455) %t566 = load ptr, ptr %t565 call void @fn_emit(ptr %t566) - call void @fn_emit(ptr @.str2622) + call void @fn_emit(ptr @.str4456) %t567 = load ptr, ptr %t562 %t568 = call i32 @fn_find_arch_id(ptr %t567) %t569 = call ptr @fn_itoa(i32 %t568) call void @fn_emit(ptr %t569) - call void @fn_emit(ptr @.str2623) - call void @fn_emit(ptr @.str2624) + call void @fn_emit(ptr @.str4457) + call void @fn_emit(ptr @.str4458) %t570 = load ptr, ptr %t565 call void @fn_emit(ptr %t570) - call void @fn_emit(ptr @.str2625) + call void @fn_emit(ptr @.str4459) %t571 = load ptr, ptr %t565 call void @fn_emit(ptr %t571) - call void @fn_emit(ptr @.str2626) + call void @fn_emit(ptr @.str4460) %t572 = load ptr, ptr %t565 call void @fn_emit(ptr %t572) - call void @fn_emit(ptr @.str2627) - call void @fn_emit(ptr @.str2628) + call void @fn_emit(ptr @.str4461) + call void @fn_emit(ptr @.str4462) %t573 = load ptr, ptr %t565 call void @fn_emit(ptr %t573) - call void @fn_emit(ptr @.str2629) + call void @fn_emit(ptr @.str4463) %t574 = load ptr, ptr %t565 call void @fn_emit(ptr %t574) - call void @fn_emit(ptr @.str2630) + call void @fn_emit(ptr @.str4464) %t575 = load ptr, ptr %t562 call void @fn_emit(ptr %t575) - call void @fn_emit(ptr @.str2631) + call void @fn_emit(ptr @.str4465) %t576 = load ptr, ptr %t565 call void @fn_emit(ptr %t576) - call void @fn_emit(ptr @.str2632) - call void @fn_emit(ptr @.str2633) + call void @fn_emit(ptr @.str4466) + call void @fn_emit(ptr @.str4467) %t577 = load ptr, ptr %t565 call void @fn_emit(ptr %t577) - call void @fn_emit(ptr @.str2634) + call void @fn_emit(ptr @.str4468) %t578 = load i32, ptr %t29 %t579 = add i32 %t578, 1 store i32 %t579, ptr %t29 @@ -31172,20 +42333,20 @@ ifend74: store i32 %t581, ptr %t30 br label %wcond69 wend71: - call void @fn_emit(ptr @.str2635) - call void @fn_emit(ptr @.str2636) - call void @fn_emit(ptr @.str2637) - call void @fn_emit(ptr @.str2638) - call void @fn_emit(ptr @.str2639) - call void @fn_emit(ptr @.str2640) + call void @fn_emit(ptr @.str4469) + call void @fn_emit(ptr @.str4470) + call void @fn_emit(ptr @.str4471) + call void @fn_emit(ptr @.str4472) + call void @fn_emit(ptr @.str4473) + call void @fn_emit(ptr @.str4474) %t582 = load ptr, ptr %t1 call void @fn_emit(ptr %t582) - call void @fn_emit(ptr @.str2641) - call void @fn_emit(ptr @.str2642) - call void @fn_emit(ptr @.str2643) - call void @fn_emit(ptr @.str2644) - call void @fn_emit(ptr @.str2645) - call void @fn_emit(ptr @.str2646) + call void @fn_emit(ptr @.str4475) + call void @fn_emit(ptr @.str4476) + call void @fn_emit(ptr @.str4477) + call void @fn_emit(ptr @.str4478) + call void @fn_emit(ptr @.str4479) + call void @fn_emit(ptr @.str4480) br label %ret ret: ret void @@ -31193,19 +42354,19 @@ ret: define void @fn_emit_tick_helpers() { entry: - call void @fn_emit(ptr @.str2647) + call void @fn_emit(ptr @.str4481) store i32 0, ptr @g_ll_t store i32 0, ptr @g_ll_lbl - call void @fn_emit_calls_for_phase(ptr @.str2648) - call void @fn_emit_calls_for_phase(ptr @.str2649) - call void @fn_emit_calls_for_phase(ptr @.str2650) - call void @fn_emit_calls_for_phase(ptr @.str2651) - call void @fn_emit(ptr @.str2652) - call void @fn_emit(ptr @.str2653) + call void @fn_emit_calls_for_phase(ptr @.str4482) + call void @fn_emit_calls_for_phase(ptr @.str4483) + call void @fn_emit_calls_for_phase(ptr @.str4484) + call void @fn_emit_calls_for_phase(ptr @.str4485) + call void @fn_emit(ptr @.str4486) + call void @fn_emit(ptr @.str4487) store i32 0, ptr @g_ll_t store i32 0, ptr @g_ll_lbl - call void @fn_emit_calls_for_phase(ptr @.str2654) - call void @fn_emit(ptr @.str2655) + call void @fn_emit_calls_for_phase(ptr @.str4488) + call void @fn_emit(ptr @.str4489) br label %ret ret: ret void @@ -31270,20 +42431,22 @@ entry: %t63 = alloca ptr %t70 = alloca ptr %t78 = alloca ptr + %t81 = alloca ptr + %t86 = alloca ptr call void @fn_emit_game_defs() - call void @fn_emit(ptr @.str2656) - call void @fn_emit(ptr @.str2657) - call void @fn_emit(ptr @.str2658) - %t0 = call ptr @fn_find_fn(ptr @.str2659) + call void @fn_emit(ptr @.str4490) + call void @fn_emit(ptr @.str4491) + call void @fn_emit(ptr @.str4492) + %t0 = call ptr @fn_find_fn(ptr @.str4493) %t1 = icmp ne ptr %t0, null %t2 = zext i1 %t1 to i32 %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str2660) + call void @fn_emit(ptr @.str4494) br label %ifend2 ifend2: - call void @fn_emit_calls_for_phase(ptr @.str2661) + call void @fn_emit_calls_for_phase(ptr @.str4495) %t4 = load ptr, ptr @g_g_scenes %t5 = getelementptr inbounds %LSlice, ptr %t4, i32 0, i32 1 %t6 = load i32, ptr %t5 @@ -31292,11 +42455,11 @@ ifend2: %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str2662) + call void @fn_emit(ptr @.str4496) %t10 = load i32, ptr @g_g_start_scene %t11 = call ptr @fn_itoa(i32 %t10) call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str2663) + call void @fn_emit(ptr @.str4497) store i32 0, ptr %t12 br label %wcond6 wcond6: @@ -31323,7 +42486,7 @@ wbody7: %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then9, label %ifend11 then9: - call void @fn_emit(ptr @.str2664) + call void @fn_emit(ptr @.str4498) %t32 = load ptr, ptr @g_g_scenes %t33 = getelementptr inbounds %LSlice, ptr %t32, i32 0, i32 0 %t34 = load ptr, ptr %t33 @@ -31333,7 +42496,7 @@ then9: %t38 = getelementptr inbounds %Cmp_Node, ptr %t37, i32 0, i32 1 %t39 = load ptr, ptr %t38 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str2665) + call void @fn_emit(ptr @.str4499) br label %ifend11 ifend11: %t40 = load i32, ptr %t12 @@ -31343,109 +42506,120 @@ ifend11: wend8: br label %ifend5 ifend5: - %t42 = call ptr @fn_find_event(ptr @.str2666) + %t42 = call ptr @fn_find_event(ptr @.str4500) %t43 = icmp ne ptr %t42, null %t44 = zext i1 %t43 to i32 %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str2667) + call void @fn_emit(ptr @.str4501) br label %ifend14 ifend14: - call void @fn_emit(ptr @.str2668) - call void @fn_emit(ptr @.str2669) - %t46 = call ptr @fn_emit_bind(ptr @.str2670) + call void @fn_emit(ptr @.str4502) + call void @fn_emit(ptr @.str4503) + %t46 = call ptr @fn_emit_bind(ptr @.str4504) store ptr %t46, ptr %t47 %t48 = load ptr, ptr %t47 - %t49 = call ptr @fn_str_concat(ptr @.str2671, ptr %t48) - %t50 = call ptr @fn_str_concat(ptr %t49, ptr @.str2672) + %t49 = call ptr @fn_str_concat(ptr @.str4505, ptr %t48) + %t50 = call ptr @fn_str_concat(ptr %t49, ptr @.str4506) %t51 = call ptr @fn_emit_bind(ptr %t50) store ptr %t51, ptr %t52 - %t53 = call ptr @fn_find_fn(ptr @.str2673) + %t53 = call ptr @fn_find_fn(ptr @.str4507) %t54 = icmp ne ptr %t53, null %t55 = zext i1 %t54 to i32 %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then15, label %else16 then15: - %t57 = call ptr @fn_emit_bind(ptr @.str2674) + %t57 = call ptr @fn_emit_bind(ptr @.str4508) store ptr %t57, ptr %t58 %t59 = load ptr, ptr %t58 - %t60 = call ptr @fn_str_concat(ptr @.str2675, ptr %t59) - %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str2676) + %t60 = call ptr @fn_str_concat(ptr @.str4509, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t60, ptr @.str4510) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 %t64 = load ptr, ptr %t52 - %t65 = call ptr @fn_str_concat(ptr @.str2677, ptr %t64) - %t66 = call ptr @fn_str_concat(ptr %t65, ptr @.str2678) + %t65 = call ptr @fn_str_concat(ptr @.str4511, ptr %t64) + %t66 = call ptr @fn_str_concat(ptr %t65, ptr @.str4512) %t67 = load ptr, ptr %t63 %t68 = call ptr @fn_str_concat(ptr %t66, ptr %t67) %t69 = call ptr @fn_emit_bind(ptr %t68) store ptr %t69, ptr %t70 - call void @fn_emit(ptr @.str2679) + call void @fn_emit(ptr @.str4513) %t71 = load ptr, ptr %t70 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str2680) + call void @fn_emit(ptr @.str4514) br label %ifend17 else16: - call void @fn_emit(ptr @.str2681) + call void @fn_emit(ptr @.str4515) %t72 = load ptr, ptr %t52 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str2682) + call void @fn_emit(ptr @.str4516) br label %ifend17 ifend17: - call void @fn_emit(ptr @.str2683) - %t73 = call ptr @fn_find_fn(ptr @.str2684) + call void @fn_emit(ptr @.str4517) + %t73 = call ptr @fn_find_fn(ptr @.str4518) %t74 = icmp ne ptr %t73, null %t75 = zext i1 %t74 to i32 %t76 = icmp ne i32 %t75, 0 br i1 %t76, label %then18, label %ifend20 then18: - %t77 = call ptr @fn_emit_bind(ptr @.str2685) + %t77 = call ptr @fn_emit_bind(ptr @.str4519) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str2686) + call void @fn_emit(ptr @.str4520) %t79 = load ptr, ptr %t78 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str2687) + call void @fn_emit(ptr @.str4521) br label %ifend20 ifend20: - call void @fn_emit_calls_for_phase(ptr @.str2688) - call void @fn_emit_calls_for_phase(ptr @.str2689) - call void @fn_emit_calls_for_phase(ptr @.str2690) - call void @fn_emit_calls_for_phase(ptr @.str2691) - call void @fn_emit_calls_for_phase(ptr @.str2692) - call void @fn_emit(ptr @.str2693) - call void @fn_emit(ptr @.str2694) - %t80 = load ptr, ptr @g_g_ondespawn - %t81 = getelementptr inbounds %LSlice, ptr %t80, i32 0, i32 1 - %t82 = load i32, ptr %t81 - %t83 = icmp sgt i32 %t82, 0 - %t84 = zext i1 %t83 to i32 - %t85 = icmp ne i32 %t84, 0 - br i1 %t85, label %then21, label %ifend23 -then21: - call void @fn_emit(ptr @.str2695) - br label %ifend23 -ifend23: - call void @fn_emit_calls_for_phase(ptr @.str2696) - %t86 = call ptr @fn_find_event(ptr @.str2697) - %t87 = icmp ne ptr %t86, null - %t88 = zext i1 %t87 to i32 - %t89 = icmp ne i32 %t88, 0 - br i1 %t89, label %then24, label %ifend26 -then24: - call void @fn_emit(ptr @.str2698) - br label %ifend26 -ifend26: - %t90 = call ptr @fn_find_fn(ptr @.str2699) - %t91 = icmp ne ptr %t90, null + call void @fn_emit_calls_for_phase(ptr @.str4522) + call void @fn_emit_calls_for_phase(ptr @.str4523) + call void @fn_emit_calls_for_phase(ptr @.str4524) + call void @fn_emit_calls_for_phase(ptr @.str4525) + call void @fn_emit_calls_for_phase(ptr @.str4526) + %t80 = call ptr @fn_emit_bind(ptr @.str4527) + store ptr %t80, ptr %t81 + %t82 = load ptr, ptr %t81 + %t83 = call ptr @fn_str_concat(ptr @.str4528, ptr %t82) + %t84 = call ptr @fn_str_concat(ptr %t83, ptr @.str4529) + %t85 = call ptr @fn_emit_bind(ptr %t84) + store ptr %t85, ptr %t86 + call void @fn_emit(ptr @.str4530) + %t87 = load ptr, ptr %t86 + call void @fn_emit(ptr %t87) + call void @fn_emit(ptr @.str4531) + call void @fn_emit(ptr @.str4532) + call void @fn_emit(ptr @.str4533) + %t88 = load ptr, ptr @g_g_ondespawn + %t89 = getelementptr inbounds %LSlice, ptr %t88, i32 0, i32 1 + %t90 = load i32, ptr %t89 + %t91 = icmp sgt i32 %t90, 0 %t92 = zext i1 %t91 to i32 %t93 = icmp ne i32 %t92, 0 - br i1 %t93, label %then27, label %ifend29 + br i1 %t93, label %then21, label %ifend23 +then21: + call void @fn_emit(ptr @.str4534) + br label %ifend23 +ifend23: + call void @fn_emit_calls_for_phase(ptr @.str4535) + %t94 = call ptr @fn_find_event(ptr @.str4536) + %t95 = icmp ne ptr %t94, null + %t96 = zext i1 %t95 to i32 + %t97 = icmp ne i32 %t96, 0 + br i1 %t97, label %then24, label %ifend26 +then24: + call void @fn_emit(ptr @.str4537) + br label %ifend26 +ifend26: + %t98 = call ptr @fn_find_fn(ptr @.str4538) + %t99 = icmp ne ptr %t98, null + %t100 = zext i1 %t99 to i32 + %t101 = icmp ne i32 %t100, 0 + br i1 %t101, label %then27, label %ifend29 then27: - call void @fn_emit(ptr @.str2700) + call void @fn_emit(ptr @.str4539) br label %ifend29 ifend29: - call void @fn_emit(ptr @.str2701) + call void @fn_emit(ptr @.str4540) br label %ret ret: ret void @@ -31518,7 +42692,7 @@ entry: %t3 = load ptr, ptr %t2 %t4 = call ptr @fn_machine_var(ptr %t3) store ptr %t4, ptr %t5 - store ptr @.str2702, ptr %t6 + store ptr @.str4541, ptr %t6 %t7 = load ptr, ptr %t5 %t8 = icmp ne ptr %t7, null %t9 = zext i1 %t8 to i32 @@ -31530,7 +42704,7 @@ then0: %t13 = load ptr, ptr %t12 %t14 = getelementptr inbounds %Cmp_Node, ptr %t13, i32 0, i32 1 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_str_concat(ptr @.str2703, ptr %t15) + %t16 = call ptr @fn_str_concat(ptr @.str4542, ptr %t15) %t17 = call ptr @fn_emit_bind(ptr %t16) store ptr %t17, ptr %t6 br label %ifend2 @@ -31543,8 +42717,8 @@ else1: %t23 = load ptr, ptr %t22 %t24 = getelementptr inbounds %Cmp_Val, ptr %t23, i32 0, i32 0 %t25 = load ptr, ptr %t24 - %t26 = call ptr @fn_str_concat(ptr @.str2704, ptr %t25) - %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str2705) + %t26 = call ptr @fn_str_concat(ptr @.str4543, ptr %t25) + %t27 = call ptr @fn_str_concat(ptr %t26, ptr @.str4544) %t28 = call ptr @fn_emit_bind(ptr %t27) store ptr %t28, ptr %t6 br label %ifend2 @@ -31600,7 +42774,7 @@ ifend5: %t62 = load i32, ptr @g_nmach %t63 = add i32 %t62, 1 store i32 %t63, ptr @g_nmach - %t64 = call ptr @fn_lbl(ptr @.str2706) + %t64 = call ptr @fn_lbl(ptr @.str4545) store ptr %t64, ptr %t65 store i32 0, ptr %t66 br label %wcond8 @@ -31631,31 +42805,31 @@ wbody9: %t88 = call ptr @fn_emit_expr(ptr %t87) store ptr %t88, ptr %t89 %t90 = load ptr, ptr %t6 - %t91 = call ptr @fn_str_concat(ptr @.str2707, ptr %t90) - %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str2708) + %t91 = call ptr @fn_str_concat(ptr @.str4546, ptr %t90) + %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str4547) %t93 = load ptr, ptr %t89 %t94 = getelementptr inbounds %Cmp_Val, ptr %t93, i32 0, i32 0 %t95 = load ptr, ptr %t94 %t96 = call ptr @fn_str_concat(ptr %t92, ptr %t95) %t97 = call ptr @fn_emit_bind(ptr %t96) store ptr %t97, ptr %t98 - %t99 = call ptr @fn_lbl(ptr @.str2709) + %t99 = call ptr @fn_lbl(ptr @.str4548) store ptr %t99, ptr %t100 - %t101 = call ptr @fn_lbl(ptr @.str2710) + %t101 = call ptr @fn_lbl(ptr @.str4549) store ptr %t101, ptr %t102 - call void @fn_emit(ptr @.str2711) + call void @fn_emit(ptr @.str4550) %t103 = load ptr, ptr %t98 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str2712) + call void @fn_emit(ptr @.str4551) %t104 = load ptr, ptr %t100 call void @fn_emit(ptr %t104) - call void @fn_emit(ptr @.str2713) + call void @fn_emit(ptr @.str4552) %t105 = load ptr, ptr %t102 call void @fn_emit(ptr %t105) - call void @fn_emit(ptr @.str2714) + call void @fn_emit(ptr @.str4553) %t106 = load ptr, ptr %t100 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str2715) + call void @fn_emit(ptr @.str4554) store i32 0, ptr @g_g_term %t107 = load ptr, ptr %t84 %t108 = getelementptr inbounds %Cmp_Node, ptr %t107, i32 0, i32 4 @@ -31667,15 +42841,15 @@ wbody9: %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then11, label %ifend13 then11: - call void @fn_emit(ptr @.str2716) + call void @fn_emit(ptr @.str4555) %t114 = load ptr, ptr %t65 call void @fn_emit(ptr %t114) - call void @fn_emit(ptr @.str2717) + call void @fn_emit(ptr @.str4556) br label %ifend13 ifend13: %t115 = load ptr, ptr %t102 call void @fn_emit(ptr %t115) - call void @fn_emit(ptr @.str2718) + call void @fn_emit(ptr @.str4557) store i32 0, ptr @g_g_term %t116 = load i32, ptr %t66 %t117 = add i32 %t116, 1 @@ -31688,15 +42862,15 @@ wend10: %t121 = icmp ne i32 %t120, 0 br i1 %t121, label %then14, label %ifend16 then14: - call void @fn_emit(ptr @.str2719) + call void @fn_emit(ptr @.str4558) %t122 = load ptr, ptr %t65 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str2720) + call void @fn_emit(ptr @.str4559) br label %ifend16 ifend16: %t123 = load ptr, ptr %t65 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str2721) + call void @fn_emit(ptr @.str4560) store i32 0, ptr @g_g_term %t124 = load i32, ptr @g_nmach %t125 = sub i32 %t124, 1 @@ -31801,19 +42975,19 @@ then9: %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then12, label %else13 then12: - call void @fn_emit(ptr @.str2722) + call void @fn_emit(ptr @.str4561) %t67 = load ptr, ptr %t62 %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 @.str2723) + call void @fn_emit(ptr @.str4562) %t70 = load ptr, ptr %t12 %t71 = getelementptr inbounds %Cmp_Node, ptr %t70, i32 0, i32 4 %t72 = load ptr, ptr %t71 %t73 = getelementptr inbounds %Cmp_Node, ptr %t72, i32 0, i32 1 %t74 = load ptr, ptr %t73 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str2724) + call void @fn_emit(ptr @.str4563) br label %ifend14 else13: %t75 = load ptr, ptr %t12 @@ -31821,17 +42995,17 @@ else13: %t77 = load ptr, ptr %t76 %t78 = call ptr @fn_emit_expr(ptr %t77) store ptr %t78, ptr %t79 - call void @fn_emit(ptr @.str2725) + call void @fn_emit(ptr @.str4564) %t80 = load ptr, ptr %t79 %t81 = getelementptr inbounds %Cmp_Val, ptr %t80, i32 0, i32 0 %t82 = load ptr, ptr %t81 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str2726) + call void @fn_emit(ptr @.str4565) %t83 = load ptr, ptr %t62 %t84 = getelementptr inbounds %Cmp_Val, ptr %t83, i32 0, i32 0 %t85 = load ptr, ptr %t84 call void @fn_emit(ptr %t85) - call void @fn_emit(ptr @.str2727) + call void @fn_emit(ptr @.str4566) br label %ifend14 ifend14: br label %ret @@ -31852,7 +43026,7 @@ then15: %t95 = load ptr, ptr %t0 %t96 = getelementptr inbounds %Cmp_Node, ptr %t95, i32 0, i32 1 %t97 = load ptr, ptr %t96 - %t98 = call ptr @fn_str_concat(ptr @.str2728, ptr %t97) + %t98 = call ptr @fn_str_concat(ptr @.str4567, ptr %t97) call void @fn_perr(ptr %t98) br label %ifend17 ifend17: @@ -31862,27 +43036,27 @@ ifend17: %t102 = icmp ne i32 %t101, 0 br i1 %t102, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str2729) + call void @fn_emit(ptr @.str4568) %t103 = load ptr, ptr @g_g_cur_scene %t104 = getelementptr inbounds %Cmp_Node, ptr %t103, i32 0, i32 1 %t105 = load ptr, ptr %t104 call void @fn_emit(ptr %t105) - call void @fn_emit(ptr @.str2730) + call void @fn_emit(ptr @.str4569) br label %ifend20 ifend20: - call void @fn_emit(ptr @.str2731) + call void @fn_emit(ptr @.str4570) %t106 = load ptr, ptr %t90 %t107 = getelementptr inbounds %Cmp_Node, ptr %t106, i32 0, i32 2 %t108 = load i32, ptr %t107 %t109 = call ptr @fn_itoa(i32 %t108) call void @fn_emit(ptr %t109) - call void @fn_emit(ptr @.str2732) - call void @fn_emit(ptr @.str2733) + call void @fn_emit(ptr @.str4571) + call void @fn_emit(ptr @.str4572) %t110 = load ptr, ptr %t90 %t111 = getelementptr inbounds %Cmp_Node, ptr %t110, i32 0, i32 1 %t112 = load ptr, ptr %t111 call void @fn_emit(ptr %t112) - call void @fn_emit(ptr @.str2734) + call void @fn_emit(ptr @.str4573) br label %ret ret: ret void @@ -31901,51 +43075,51 @@ entry: store ptr %arg_p, ptr %t1 store ptr %arg_bytes, ptr %t2 %t3 = load ptr, ptr @g_g_snap_mode - %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str2735) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str4574) %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then0, label %ifend2 then0: %t6 = load i32, ptr @g_g_iok %t7 = call ptr @fn_itoa(i32 %t6) - %t8 = call ptr @fn_str_concat(ptr @.str2736, ptr %t7) + %t8 = call ptr @fn_str_concat(ptr @.str4575, ptr %t7) store ptr %t8, ptr %t9 %t10 = load i32, ptr @g_g_iok %t11 = add i32 %t10, 1 store i32 %t11, ptr @g_g_iok - call void @fn_emit(ptr @.str2737) + call void @fn_emit(ptr @.str4576) %t12 = load ptr, ptr %t9 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str2738) + call void @fn_emit(ptr @.str4577) %t13 = load ptr, ptr %t0 call void @fn_emit(ptr %t13) - call void @fn_emit(ptr @.str2739) + call void @fn_emit(ptr @.str4578) %t14 = load ptr, ptr %t1 call void @fn_emit(ptr %t14) - call void @fn_emit(ptr @.str2740) + call void @fn_emit(ptr @.str4579) %t15 = load ptr, ptr %t2 call void @fn_emit(ptr %t15) - call void @fn_emit(ptr @.str2741) + call void @fn_emit(ptr @.str4580) br label %ret ifend2: %t16 = load ptr, ptr @g_g_snap_mode - %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str2742) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str4581) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then3, label %ifend5 then3: %t19 = load i32, ptr @g_g_iok %t20 = call ptr @fn_itoa(i32 %t19) - %t21 = call ptr @fn_str_concat(ptr @.str2743, ptr %t20) + %t21 = call ptr @fn_str_concat(ptr @.str4582, ptr %t20) store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str2744) + call void @fn_emit(ptr @.str4583) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str2745) + call void @fn_emit(ptr @.str4584) %t24 = load ptr, ptr @g_g_off call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str2746) + call void @fn_emit(ptr @.str4585) %t25 = load ptr, ptr %t2 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str2747) + call void @fn_emit(ptr @.str4586) %t26 = load ptr, ptr %t22 store ptr %t26, ptr @g_g_off %t27 = load i32, ptr @g_g_iok @@ -31955,58 +43129,58 @@ then3: ifend5: %t29 = load i32, ptr @g_g_iok %t30 = call ptr @fn_itoa(i32 %t29) - %t31 = call ptr @fn_str_concat(ptr @.str2748, ptr %t30) + %t31 = call ptr @fn_str_concat(ptr @.str4587, ptr %t30) store ptr %t31, ptr %t32 - call void @fn_emit(ptr @.str2749) + call void @fn_emit(ptr @.str4588) %t33 = load ptr, ptr %t32 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str2750) + call void @fn_emit(ptr @.str4589) %t34 = load ptr, ptr @g_g_off call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str2751) + call void @fn_emit(ptr @.str4590) %t35 = load ptr, ptr @g_g_snap_mode - %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str2752) + %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str4591) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then6, label %else7 then6: - call void @fn_emit(ptr @.str2753) + call void @fn_emit(ptr @.str4592) %t38 = load ptr, ptr %t32 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str2754) + call void @fn_emit(ptr @.str4593) %t39 = load ptr, ptr %t1 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str2755) + call void @fn_emit(ptr @.str4594) %t40 = load ptr, ptr %t2 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str2756) + call void @fn_emit(ptr @.str4595) br label %ifend8 else7: - call void @fn_emit(ptr @.str2757) + call void @fn_emit(ptr @.str4596) %t41 = load ptr, ptr %t1 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str2758) + call void @fn_emit(ptr @.str4597) %t42 = load ptr, ptr %t32 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str2759) + call void @fn_emit(ptr @.str4598) %t43 = load ptr, ptr %t2 call void @fn_emit(ptr %t43) - call void @fn_emit(ptr @.str2760) + call void @fn_emit(ptr @.str4599) br label %ifend8 ifend8: %t44 = load i32, ptr @g_g_iok %t45 = call ptr @fn_itoa(i32 %t44) - %t46 = call ptr @fn_str_concat(ptr @.str2761, ptr %t45) + %t46 = call ptr @fn_str_concat(ptr @.str4600, ptr %t45) store ptr %t46, ptr %t47 - call void @fn_emit(ptr @.str2762) + call void @fn_emit(ptr @.str4601) %t48 = load ptr, ptr %t47 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str2763) + call void @fn_emit(ptr @.str4602) %t49 = load ptr, ptr @g_g_off call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str2764) + call void @fn_emit(ptr @.str4603) %t50 = load ptr, ptr %t2 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2765) + call void @fn_emit(ptr @.str4604) %t51 = load ptr, ptr %t47 store ptr %t51, ptr @g_g_off %t52 = load i32, ptr @g_g_iok @@ -32027,29 +43201,29 @@ entry: %t74 = alloca ptr store ptr %arg_fn2, ptr %t0 store i32 0, ptr @g_g_iok - store ptr @.str2766, ptr @g_g_off + store ptr @.str4605, ptr @g_g_off %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 @.str2767, ptr @.str2768) + call void @fn_emit_io(ptr %t3, ptr @.str4606, ptr @.str4607) %t4 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t4, ptr @.str2769, ptr @.str2770) - call void @fn_emit(ptr @.str2771) + call void @fn_emit_io(ptr %t4, ptr @.str4608, ptr @.str4609) + call void @fn_emit(ptr @.str4610) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str2772) + call void @fn_emit(ptr @.str4611) %t6 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t6, ptr @.str2773, ptr @.str2774) + call void @fn_emit_io(ptr %t6, ptr @.str4612, ptr @.str4613) %t7 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t7, ptr @.str2775, ptr @.str2776) + call void @fn_emit_io(ptr %t7, ptr @.str4614, ptr @.str4615) %t8 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t8, ptr @.str2777, ptr @.str2778) + call void @fn_emit_io(ptr %t8, ptr @.str4616, ptr @.str4617) %t9 = call i32 @fn_net_has_owned() %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then0, label %ifend2 then0: %t11 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t11, ptr @.str2779, ptr @.str2780) + call void @fn_emit_io(ptr %t11, ptr @.str4618, ptr @.str4619) br label %ifend2 ifend2: store i32 0, ptr %t12 @@ -32086,8 +43260,8 @@ then6: %t37 = load ptr, ptr %t36 %t38 = getelementptr inbounds %Cmp_Node, ptr %t37, i32 0, i32 1 %t39 = load ptr, ptr %t38 - %t40 = call ptr @fn_str_concat(ptr @.str2781, ptr %t39) - call void @fn_emit_io(ptr %t31, ptr %t40, ptr @.str2782) + %t40 = call ptr @fn_str_concat(ptr @.str4620, ptr %t39) + call void @fn_emit_io(ptr %t31, ptr %t40, ptr @.str4621) br label %ifend8 ifend8: %t41 = load i32, ptr %t12 @@ -32132,26 +43306,26 @@ then12: store ptr %t69, ptr %t70 %t71 = load i32, ptr %t43 %t72 = call ptr @fn_itoa(i32 %t71) - %t73 = call ptr @fn_str_concat(ptr @.str2783, ptr %t72) + %t73 = call ptr @fn_str_concat(ptr @.str4622, ptr %t72) store ptr %t73, ptr %t74 - call void @fn_emit(ptr @.str2784) + call void @fn_emit(ptr @.str4623) %t75 = load ptr, ptr %t74 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str2785) + call void @fn_emit(ptr @.str4624) %t76 = load ptr, ptr %t70 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str2786) + call void @fn_emit(ptr @.str4625) %t77 = load ptr, ptr %t2 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str2787) + call void @fn_emit(ptr @.str4626) %t78 = load ptr, ptr %t0 %t79 = load ptr, ptr %t70 - %t80 = call ptr @fn_str_concat(ptr @.str2788, ptr %t79) + %t80 = call ptr @fn_str_concat(ptr @.str4627, ptr %t79) %t81 = load ptr, ptr %t74 call void @fn_emit_io(ptr %t78, ptr %t80, ptr %t81) %t82 = load ptr, ptr %t0 %t83 = load ptr, ptr %t70 - %t84 = call ptr @fn_str_concat(ptr @.str2789, ptr %t83) + %t84 = call ptr @fn_str_concat(ptr @.str4628, ptr %t83) %t85 = load ptr, ptr %t2 call void @fn_emit_io(ptr %t82, ptr %t84, ptr %t85) %t86 = load i32, ptr %t43 @@ -32175,85 +43349,85 @@ entry: %t7 = alloca i32 %t15 = alloca ptr %t22 = alloca ptr - store ptr @.str2790, ptr @g_g_snap_mode - call void @fn_emith(ptr @.str2791) - call void @fn_emith(ptr @.str2792) - call void @fn_emith(ptr @.str2793) - %t0 = call ptr @fn_find_fn(ptr @.str2794) + store ptr @.str4629, ptr @g_g_snap_mode + call void @fn_emith(ptr @.str4630) + call void @fn_emith(ptr @.str4631) + call void @fn_emith(ptr @.str4632) + %t0 = call ptr @fn_find_fn(ptr @.str4633) %t1 = icmp ne ptr %t0, null %t2 = zext i1 %t1 to i32 store i32 %t2, ptr %t3 - %t4 = call ptr @fn_find_fn(ptr @.str2795) + %t4 = call ptr @fn_find_fn(ptr @.str4634) %t5 = icmp ne ptr %t4, null %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t7 - call void @fn_emit(ptr @.str2796) - call void @fn_emit(ptr @.str2797) - call void @fn_emit(ptr @.str2798) - call void @fn_emit(ptr @.str2799) - call void @fn_emit_snapshot_blocks(ptr @.str2800) + call void @fn_emit(ptr @.str4635) + call void @fn_emit(ptr @.str4636) + call void @fn_emit(ptr @.str4637) + call void @fn_emit(ptr @.str4638) + call void @fn_emit_snapshot_blocks(ptr @.str4639) %t8 = load i32, ptr %t3 %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str2801) + call void @fn_emit(ptr @.str4640) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str2802) - call void @fn_emit(ptr @.str2803) - call void @fn_emit(ptr @.str2804) - call void @fn_emit(ptr @.str2805) - call void @fn_emit(ptr @.str2806) - call void @fn_emit_snapshot_blocks(ptr @.str2807) + call void @fn_emit(ptr @.str4641) + call void @fn_emit(ptr @.str4642) + call void @fn_emit(ptr @.str4643) + call void @fn_emit(ptr @.str4644) + call void @fn_emit(ptr @.str4645) + call void @fn_emit_snapshot_blocks(ptr @.str4646) %t10 = load i32, ptr %t7 %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str2808) + call void @fn_emit(ptr @.str4647) br label %ifend5 ifend5: - call void @fn_emit(ptr @.str2809) - call void @fn_emit(ptr @.str2810) - store ptr @.str2811, ptr @g_g_snap_mode - call void @fn_emit_snapshot_blocks(ptr @.str2812) + call void @fn_emit(ptr @.str4648) + call void @fn_emit(ptr @.str4649) + store ptr @.str4650, ptr @g_g_snap_mode + call void @fn_emit_snapshot_blocks(ptr @.str4651) %t12 = load i32, ptr @g_g_iok %t13 = call ptr @fn_itoa(i32 %t12) - %t14 = call ptr @fn_str_concat(ptr @.str2813, ptr %t13) + %t14 = call ptr @fn_str_concat(ptr @.str4652, ptr %t13) store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str2814) + call void @fn_emit(ptr @.str4653) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str2815) + call void @fn_emit(ptr @.str4654) %t17 = load ptr, ptr @g_g_off call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str2816) - call void @fn_emit(ptr @.str2817) + call void @fn_emit(ptr @.str4655) + call void @fn_emit(ptr @.str4656) %t18 = load ptr, ptr %t15 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str2818) - call void @fn_emit(ptr @.str2819) - store ptr @.str2820, ptr @g_g_snap_mode - call void @fn_emit_snapshot_blocks(ptr @.str2821) - call void @fn_emit(ptr @.str2822) - call void @fn_emit(ptr @.str2823) - store ptr @.str2824, ptr @g_g_snap_mode - call void @fn_emit_snapshot_blocks(ptr @.str2825) + call void @fn_emit(ptr @.str4657) + call void @fn_emit(ptr @.str4658) + store ptr @.str4659, ptr @g_g_snap_mode + call void @fn_emit_snapshot_blocks(ptr @.str4660) + call void @fn_emit(ptr @.str4661) + call void @fn_emit(ptr @.str4662) + store ptr @.str4663, ptr @g_g_snap_mode + call void @fn_emit_snapshot_blocks(ptr @.str4664) %t19 = load i32, ptr @g_g_iok %t20 = call ptr @fn_itoa(i32 %t19) - %t21 = call ptr @fn_str_concat(ptr @.str2826, ptr %t20) + %t21 = call ptr @fn_str_concat(ptr @.str4665, ptr %t20) store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str2827) + call void @fn_emit(ptr @.str4666) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str2828) + call void @fn_emit(ptr @.str4667) %t24 = load ptr, ptr @g_g_off call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str2829) - call void @fn_emit(ptr @.str2830) + call void @fn_emit(ptr @.str4668) + call void @fn_emit(ptr @.str4669) %t25 = load ptr, ptr %t22 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str2831) - store ptr @.str2832, ptr @g_g_snap_mode + call void @fn_emit(ptr @.str4670) + store ptr @.str4671, ptr @g_g_snap_mode br label %ret ret: ret void @@ -32266,7 +43440,7 @@ entry: store ptr %arg_ty, ptr %t0 %t1 = load ptr, ptr %t0 %t2 = call ptr @fn_llty(ptr %t1) - %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2833) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str4672) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -32287,14 +43461,14 @@ entry: store ptr %arg_ty, ptr %t0 %t1 = load ptr, ptr %t0 %t2 = call ptr @fn_llty(ptr %t1) - %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str2834) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str4673) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - store ptr @.str2835, ptr %retval + store ptr @.str4674, ptr %retval br label %ret ifend2: - store ptr @.str2836, ptr %retval + store ptr @.str4675, ptr %retval br label %ret ret: %t5 = load ptr, ptr %retval @@ -32675,7 +43849,7 @@ entry: store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t2 %t4 = zext i32 23 to i64 - %t5 = call i64 @fwrite(ptr @.str2837, i64 1, i64 %t4, ptr %t3) + %t5 = call i64 @fwrite(ptr @.str4676, i64 1, i64 %t4, ptr %t3) %t6 = trunc i64 %t5 to i32 %t7 = load ptr, ptr %t2 %t8 = load ptr, ptr %t0 @@ -32687,7 +43861,7 @@ entry: %t14 = trunc i64 %t13 to i32 %t15 = load ptr, ptr %t2 %t16 = zext i32 1 to i64 - %t17 = call i64 @fwrite(ptr @.str2838, i64 1, i64 %t16, ptr %t15) + %t17 = call i64 @fwrite(ptr @.str4677, i64 1, i64 %t16, ptr %t15) %t18 = trunc i64 %t17 to i32 br label %ret ret: @@ -32826,13 +44000,13 @@ then18: %t99 = getelementptr inbounds %Cmp_Node, ptr %t98, i32 0, i32 3 %t100 = load ptr, ptr %t99 %t101 = call ptr @fn_llty(ptr %t100) - %t102 = call i32 @fn_str_eq(ptr %t101, ptr @.str2839) + %t102 = call i32 @fn_str_eq(ptr %t101, ptr @.str4678) %t103 = icmp ne i32 %t102, 0 br i1 %t103, label %then21, label %ifend23 then21: %t104 = load ptr, ptr %t59 - %t105 = call ptr @fn_str_concat(ptr @.str2840, ptr %t104) - %t106 = call ptr @fn_str_concat(ptr %t105, ptr @.str2841) + %t105 = call ptr @fn_str_concat(ptr @.str4679, ptr %t104) + %t106 = call ptr @fn_str_concat(ptr %t105, ptr @.str4680) %t107 = load ptr, ptr %t62 %t108 = getelementptr inbounds %Cmp_Node, ptr %t107, i32 0, i32 7 %t109 = load ptr, ptr %t108 @@ -32844,7 +44018,7 @@ then21: %t115 = getelementptr inbounds %Cmp_Node, ptr %t114, i32 0, i32 1 %t116 = load ptr, ptr %t115 %t117 = call ptr @fn_str_concat(ptr %t106, ptr %t116) - %t118 = call ptr @fn_str_concat(ptr %t117, ptr @.str2842) + %t118 = call ptr @fn_str_concat(ptr %t117, ptr @.str4681) call void @fn_perr(ptr %t118) br label %ifend23 ifend23: @@ -32864,11 +44038,11 @@ then24: %t125 = load ptr, ptr %t25 %t126 = getelementptr inbounds %Cmp_Node, ptr %t125, i32 0, i32 1 %t127 = load ptr, ptr %t126 - %t128 = call ptr @fn_str_concat(ptr @.str2843, ptr %t127) - %t129 = call ptr @fn_str_concat(ptr %t128, ptr @.str2844) + %t128 = call ptr @fn_str_concat(ptr @.str4682, ptr %t127) + %t129 = call ptr @fn_str_concat(ptr %t128, ptr @.str4683) %t130 = load ptr, ptr %t59 %t131 = call ptr @fn_str_concat(ptr %t129, ptr %t130) - %t132 = call ptr @fn_str_concat(ptr %t131, ptr @.str2845) + %t132 = call ptr @fn_str_concat(ptr %t131, ptr @.str4684) call void @fn_net_warn(ptr %t132) br label %ifend26 ifend26: @@ -32910,12 +44084,12 @@ entry: store i32 0, ptr @g_ll_t %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 - call void @fn_emit(ptr @.str2846) + call void @fn_emit(ptr @.str4685) %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 1 %t5 = load ptr, ptr %t4 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str2847) + call void @fn_emit(ptr @.str4686) store i32 0, ptr %t6 store i32 0, ptr %t7 br label %wcond0 @@ -32968,19 +44142,19 @@ then3: then6: %t48 = call ptr @fn_nreg() store ptr %t48, ptr %t49 - call void @fn_emit(ptr @.str2848) + call void @fn_emit(ptr @.str4687) %t50 = load ptr, ptr %t49 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2849) + call void @fn_emit(ptr @.str4688) %t51 = load ptr, ptr %t2 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str2850) + call void @fn_emit(ptr @.str4689) %t52 = load ptr, ptr %t40 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str2851) + call void @fn_emit(ptr @.str4690) %t53 = load ptr, ptr %t40 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str2852) + call void @fn_emit(ptr @.str4691) store i32 0, ptr %t54 br label %wcond9 wcond9: @@ -33024,40 +44198,40 @@ then12: store ptr %t87, ptr %t88 %t89 = call ptr @fn_nreg() store ptr %t89, ptr %t90 - call void @fn_emit(ptr @.str2853) + call void @fn_emit(ptr @.str4692) %t91 = load ptr, ptr %t90 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str2854) + call void @fn_emit(ptr @.str4693) %t92 = load ptr, ptr %t40 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str2855) + call void @fn_emit(ptr @.str4694) %t93 = load ptr, ptr %t49 call void @fn_emit(ptr %t93) - call void @fn_emit(ptr @.str2856) + call void @fn_emit(ptr @.str4695) %t94 = load i32, ptr %t54 %t95 = call ptr @fn_itoa(i32 %t94) call void @fn_emit(ptr %t95) - call void @fn_emit(ptr @.str2857) + call void @fn_emit(ptr @.str4696) %t96 = call ptr @fn_nreg() store ptr %t96, ptr %t97 - call void @fn_emit(ptr @.str2858) + call void @fn_emit(ptr @.str4697) %t98 = load ptr, ptr %t97 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str2859) + call void @fn_emit(ptr @.str4698) %t99 = load i32, ptr %t6 %t100 = call ptr @fn_itoa(i32 %t99) call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str2860) - call void @fn_emit(ptr @.str2861) + call void @fn_emit(ptr @.str4699) + call void @fn_emit(ptr @.str4700) %t101 = load ptr, ptr %t97 call void @fn_emit(ptr %t101) - call void @fn_emit(ptr @.str2862) + call void @fn_emit(ptr @.str4701) %t102 = load ptr, ptr %t90 call void @fn_emit(ptr %t102) - call void @fn_emit(ptr @.str2863) + call void @fn_emit(ptr @.str4702) %t103 = load ptr, ptr %t88 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str2864) + call void @fn_emit(ptr @.str4703) %t104 = load i32, ptr %t6 %t105 = load ptr, ptr %t43 %t106 = getelementptr inbounds %Cmp_Node, ptr %t105, i32 0, i32 7 @@ -33088,11 +44262,11 @@ ifend5: store i32 %t120, ptr %t7 br label %wcond0 wend2: - call void @fn_emit(ptr @.str2865) + call void @fn_emit(ptr @.str4704) %t121 = load i32, ptr %t6 %t122 = call ptr @fn_itoa(i32 %t121) call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str2866) + call void @fn_emit(ptr @.str4705) br label %ret ret: ret void @@ -33115,12 +44289,12 @@ entry: store i32 0, ptr @g_ll_t %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 - call void @fn_emit(ptr @.str2867) + call void @fn_emit(ptr @.str4706) %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 1 %t5 = load ptr, ptr %t4 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str2868) + call void @fn_emit(ptr @.str4707) store i32 0, ptr %t6 store i32 0, ptr %t7 br label %wcond0 @@ -33173,19 +44347,19 @@ then3: then6: %t48 = call ptr @fn_nreg() store ptr %t48, ptr %t49 - call void @fn_emit(ptr @.str2869) + call void @fn_emit(ptr @.str4708) %t50 = load ptr, ptr %t49 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str2870) + call void @fn_emit(ptr @.str4709) %t51 = load ptr, ptr %t2 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str2871) + call void @fn_emit(ptr @.str4710) %t52 = load ptr, ptr %t40 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str2872) + call void @fn_emit(ptr @.str4711) %t53 = load ptr, ptr %t40 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str2873) + call void @fn_emit(ptr @.str4712) store i32 0, ptr %t54 br label %wcond9 wcond9: @@ -33229,40 +44403,40 @@ then12: store ptr %t87, ptr %t88 %t89 = call ptr @fn_nreg() store ptr %t89, ptr %t90 - call void @fn_emit(ptr @.str2874) + call void @fn_emit(ptr @.str4713) %t91 = load ptr, ptr %t90 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str2875) + call void @fn_emit(ptr @.str4714) %t92 = load ptr, ptr %t40 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str2876) + call void @fn_emit(ptr @.str4715) %t93 = load ptr, ptr %t49 call void @fn_emit(ptr %t93) - call void @fn_emit(ptr @.str2877) + call void @fn_emit(ptr @.str4716) %t94 = load i32, ptr %t54 %t95 = call ptr @fn_itoa(i32 %t94) call void @fn_emit(ptr %t95) - call void @fn_emit(ptr @.str2878) + call void @fn_emit(ptr @.str4717) %t96 = call ptr @fn_nreg() store ptr %t96, ptr %t97 - call void @fn_emit(ptr @.str2879) + call void @fn_emit(ptr @.str4718) %t98 = load ptr, ptr %t97 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str2880) + call void @fn_emit(ptr @.str4719) %t99 = load i32, ptr %t6 %t100 = call ptr @fn_itoa(i32 %t99) call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str2881) - call void @fn_emit(ptr @.str2882) + call void @fn_emit(ptr @.str4720) + call void @fn_emit(ptr @.str4721) %t101 = load ptr, ptr %t90 call void @fn_emit(ptr %t101) - call void @fn_emit(ptr @.str2883) + call void @fn_emit(ptr @.str4722) %t102 = load ptr, ptr %t97 call void @fn_emit(ptr %t102) - call void @fn_emit(ptr @.str2884) + call void @fn_emit(ptr @.str4723) %t103 = load ptr, ptr %t88 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str2885) + call void @fn_emit(ptr @.str4724) %t104 = load i32, ptr %t6 %t105 = load ptr, ptr %t43 %t106 = getelementptr inbounds %Cmp_Node, ptr %t105, i32 0, i32 7 @@ -33293,7 +44467,7 @@ ifend5: store i32 %t120, ptr %t7 br label %wcond0 wend2: - call void @fn_emit(ptr @.str2886) + call void @fn_emit(ptr @.str4725) br label %ret ret: ret void @@ -33315,11 +44489,11 @@ entry: %t165 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emit(ptr @.str2887) - call void @fn_emit(ptr @.str2888) + call void @fn_emit(ptr @.str4726) + call void @fn_emit(ptr @.str4727) %t2 = load ptr, ptr %t1 call void @fn_emit(ptr %t2) - call void @fn_emit(ptr @.str2889) + call void @fn_emit(ptr @.str4728) store i32 0, ptr %t3 store i32 0, ptr %t4 br label %wcond0 @@ -33376,42 +44550,42 @@ then5: %t45 = load i32, ptr %t3 %t46 = call ptr @fn_itoa(i32 %t45) store ptr %t46, ptr %t47 - call void @fn_emit(ptr @.str2890) + call void @fn_emit(ptr @.str4729) %t48 = load ptr, ptr %t47 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str2891) + call void @fn_emit(ptr @.str4730) %t49 = load ptr, ptr %t44 %t50 = call i32 @fn_find_arch_id(ptr %t49) %t51 = call ptr @fn_itoa(i32 %t50) call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str2892) - call void @fn_emit(ptr @.str2893) + call void @fn_emit(ptr @.str4731) + call void @fn_emit(ptr @.str4732) %t52 = load ptr, ptr %t47 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str2894) + call void @fn_emit(ptr @.str4733) %t53 = load ptr, ptr %t47 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str2895) + call void @fn_emit(ptr @.str4734) %t54 = load ptr, ptr %t47 call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str2896) - call void @fn_emit(ptr @.str2897) + call void @fn_emit(ptr @.str4735) + call void @fn_emit(ptr @.str4736) %t55 = load ptr, ptr %t47 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str2898) + call void @fn_emit(ptr @.str4737) %t56 = load ptr, ptr %t47 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str2899) + call void @fn_emit(ptr @.str4738) %t57 = load ptr, ptr %t44 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str2900) + call void @fn_emit(ptr @.str4739) %t58 = load ptr, ptr %t47 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str2901) - call void @fn_emit(ptr @.str2902) + call void @fn_emit(ptr @.str4740) + call void @fn_emit(ptr @.str4741) %t59 = load ptr, ptr %t47 call void @fn_emit(ptr %t59) - call void @fn_emit(ptr @.str2903) + call void @fn_emit(ptr @.str4742) %t60 = load i32, ptr %t3 %t61 = add i32 %t60, 1 store i32 %t61, ptr %t3 @@ -33422,12 +44596,12 @@ ifend7: store i32 %t63, ptr %t4 br label %wcond0 wend2: - call void @fn_emit(ptr @.str2904) - call void @fn_emit(ptr @.str2905) - call void @fn_emit(ptr @.str2906) + call void @fn_emit(ptr @.str4743) + call void @fn_emit(ptr @.str4744) + call void @fn_emit(ptr @.str4745) %t64 = load ptr, ptr %t1 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str2907) + call void @fn_emit(ptr @.str4746) store i32 0, ptr %t3 store i32 0, ptr %t4 br label %wcond8 @@ -33484,36 +44658,36 @@ then13: %t105 = load i32, ptr %t3 %t106 = call ptr @fn_itoa(i32 %t105) store ptr %t106, ptr %t107 - call void @fn_emit(ptr @.str2908) + call void @fn_emit(ptr @.str4747) %t108 = load ptr, ptr %t107 call void @fn_emit(ptr %t108) - call void @fn_emit(ptr @.str2909) + call void @fn_emit(ptr @.str4748) %t109 = load ptr, ptr %t104 %t110 = call i32 @fn_find_arch_id(ptr %t109) %t111 = call ptr @fn_itoa(i32 %t110) call void @fn_emit(ptr %t111) - call void @fn_emit(ptr @.str2910) - call void @fn_emit(ptr @.str2911) + call void @fn_emit(ptr @.str4749) + call void @fn_emit(ptr @.str4750) %t112 = load ptr, ptr %t107 call void @fn_emit(ptr %t112) - call void @fn_emit(ptr @.str2912) + call void @fn_emit(ptr @.str4751) %t113 = load ptr, ptr %t107 call void @fn_emit(ptr %t113) - call void @fn_emit(ptr @.str2913) + call void @fn_emit(ptr @.str4752) %t114 = load ptr, ptr %t107 call void @fn_emit(ptr %t114) - call void @fn_emit(ptr @.str2914) - call void @fn_emit(ptr @.str2915) + call void @fn_emit(ptr @.str4753) + call void @fn_emit(ptr @.str4754) %t115 = load ptr, ptr %t107 call void @fn_emit(ptr %t115) - call void @fn_emit(ptr @.str2916) + call void @fn_emit(ptr @.str4755) %t116 = load ptr, ptr %t104 call void @fn_emit(ptr %t116) - call void @fn_emit(ptr @.str2917) - call void @fn_emit(ptr @.str2918) + call void @fn_emit(ptr @.str4756) + call void @fn_emit(ptr @.str4757) %t117 = load ptr, ptr %t107 call void @fn_emit(ptr %t117) - call void @fn_emit(ptr @.str2919) + call void @fn_emit(ptr @.str4758) %t118 = load i32, ptr %t3 %t119 = add i32 %t118, 1 store i32 %t119, ptr %t3 @@ -33524,12 +44698,12 @@ ifend15: store i32 %t121, ptr %t4 br label %wcond8 wend10: - call void @fn_emit(ptr @.str2920) - call void @fn_emit(ptr @.str2921) - call void @fn_emit(ptr @.str2922) + call void @fn_emit(ptr @.str4759) + call void @fn_emit(ptr @.str4760) + call void @fn_emit(ptr @.str4761) %t122 = load ptr, ptr %t1 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str2923) + call void @fn_emit(ptr @.str4762) store i32 0, ptr %t3 store i32 0, ptr %t4 br label %wcond16 @@ -33586,29 +44760,29 @@ then21: %t163 = load i32, ptr %t3 %t164 = call ptr @fn_itoa(i32 %t163) store ptr %t164, ptr %t165 - call void @fn_emit(ptr @.str2924) + call void @fn_emit(ptr @.str4763) %t166 = load ptr, ptr %t165 call void @fn_emit(ptr %t166) - call void @fn_emit(ptr @.str2925) + call void @fn_emit(ptr @.str4764) %t167 = load ptr, ptr %t162 %t168 = call i32 @fn_find_arch_id(ptr %t167) %t169 = call ptr @fn_itoa(i32 %t168) call void @fn_emit(ptr %t169) - call void @fn_emit(ptr @.str2926) - call void @fn_emit(ptr @.str2927) + call void @fn_emit(ptr @.str4765) + call void @fn_emit(ptr @.str4766) %t170 = load ptr, ptr %t165 call void @fn_emit(ptr %t170) - call void @fn_emit(ptr @.str2928) + call void @fn_emit(ptr @.str4767) %t171 = load ptr, ptr %t165 call void @fn_emit(ptr %t171) - call void @fn_emit(ptr @.str2929) + call void @fn_emit(ptr @.str4768) %t172 = load ptr, ptr %t165 call void @fn_emit(ptr %t172) - call void @fn_emit(ptr @.str2930) - call void @fn_emit(ptr @.str2931) + call void @fn_emit(ptr @.str4769) + call void @fn_emit(ptr @.str4770) %t173 = load ptr, ptr %t165 call void @fn_emit(ptr %t173) - call void @fn_emit(ptr @.str2932) + call void @fn_emit(ptr @.str4771) %t174 = load ptr, ptr @g_prog %t175 = getelementptr inbounds %LSlice, ptr %t174, i32 0, i32 0 %t176 = load ptr, ptr %t175 @@ -33618,11 +44792,11 @@ then21: %t180 = call i32 @fn_net_model_bytes(ptr %t179) %t181 = call ptr @fn_itoa(i32 %t180) call void @fn_emit(ptr %t181) - call void @fn_emit(ptr @.str2933) - call void @fn_emit(ptr @.str2934) + call void @fn_emit(ptr @.str4772) + call void @fn_emit(ptr @.str4773) %t182 = load ptr, ptr %t165 call void @fn_emit(ptr %t182) - call void @fn_emit(ptr @.str2935) + call void @fn_emit(ptr @.str4774) %t183 = load i32, ptr %t3 %t184 = add i32 %t183, 1 store i32 %t184, ptr %t3 @@ -33633,7 +44807,7 @@ ifend23: store i32 %t186, ptr %t4 br label %wcond16 wend18: - call void @fn_emit(ptr @.str2936) + call void @fn_emit(ptr @.str4775) br label %ret ret: ret void @@ -33644,22 +44818,22 @@ entry: %t1 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emit(ptr @.str2937) - call void @fn_emit(ptr @.str2938) + call void @fn_emit(ptr @.str4776) + call void @fn_emit(ptr @.str4777) %t2 = load ptr, ptr %t1 call void @fn_emit(ptr %t2) - call void @fn_emit(ptr @.str2939) - call void @fn_emit(ptr @.str2940) - call void @fn_emit(ptr @.str2941) + call void @fn_emit(ptr @.str4778) + call void @fn_emit(ptr @.str4779) + call void @fn_emit(ptr @.str4780) %t3 = load ptr, ptr %t1 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str2942) - call void @fn_emit(ptr @.str2943) - call void @fn_emit(ptr @.str2944) + call void @fn_emit(ptr @.str4781) + call void @fn_emit(ptr @.str4782) + call void @fn_emit(ptr @.str4783) %t4 = load ptr, ptr %t1 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str2945) - call void @fn_emit(ptr @.str2946) + call void @fn_emit(ptr @.str4784) + call void @fn_emit(ptr @.str4785) br label %ret ret: ret void @@ -33667,32 +44841,32 @@ ret: define void @fn_emit_loopback() { entry: - call void @fn_emith(ptr @.str2947) - call void @fn_emith(ptr @.str2948) - call void @fn_emith(ptr @.str2949) - call void @fn_emith(ptr @.str2950) - call void @fn_emit(ptr @.str2951) - call void @fn_emit(ptr @.str2952) - call void @fn_emit(ptr @.str2953) - call void @fn_emit(ptr @.str2954) - call void @fn_emit(ptr @.str2955) - call void @fn_emit(ptr @.str2956) - call void @fn_emit(ptr @.str2957) - call void @fn_emit(ptr @.str2958) - call void @fn_emit(ptr @.str2959) - call void @fn_emit(ptr @.str2960) - call void @fn_emit(ptr @.str2961) - call void @fn_emit(ptr @.str2962) - call void @fn_emit(ptr @.str2963) - call void @fn_emit(ptr @.str2964) - call void @fn_emit(ptr @.str2965) - call void @fn_emit(ptr @.str2966) - call void @fn_emit(ptr @.str2967) - call void @fn_emit(ptr @.str2968) - call void @fn_emit(ptr @.str2969) - call void @fn_emit(ptr @.str2970) - call void @fn_emit(ptr @.str2971) - call void @fn_emit(ptr @.str2972) + call void @fn_emith(ptr @.str4786) + call void @fn_emith(ptr @.str4787) + call void @fn_emith(ptr @.str4788) + call void @fn_emith(ptr @.str4789) + call void @fn_emit(ptr @.str4790) + call void @fn_emit(ptr @.str4791) + call void @fn_emit(ptr @.str4792) + call void @fn_emit(ptr @.str4793) + call void @fn_emit(ptr @.str4794) + call void @fn_emit(ptr @.str4795) + call void @fn_emit(ptr @.str4796) + call void @fn_emit(ptr @.str4797) + call void @fn_emit(ptr @.str4798) + call void @fn_emit(ptr @.str4799) + call void @fn_emit(ptr @.str4800) + call void @fn_emit(ptr @.str4801) + call void @fn_emit(ptr @.str4802) + call void @fn_emit(ptr @.str4803) + call void @fn_emit(ptr @.str4804) + call void @fn_emit(ptr @.str4805) + call void @fn_emit(ptr @.str4806) + call void @fn_emit(ptr @.str4807) + call void @fn_emit(ptr @.str4808) + call void @fn_emit(ptr @.str4809) + call void @fn_emit(ptr @.str4810) + call void @fn_emit(ptr @.str4811) br label %ret ret: ret void @@ -33794,7 +44968,7 @@ define ptr @fn_net_send_sym() { entry: %retval = alloca ptr %t1 = alloca ptr - %t0 = call ptr @fn_find_extern(ptr @.str2973) + %t0 = call ptr @fn_find_extern(ptr @.str4812) store ptr %t0, ptr %t1 %t2 = load ptr, ptr %t1 %t3 = icmp ne ptr %t2, null @@ -33810,7 +44984,7 @@ then0: store ptr %t10, ptr %retval br label %ret ifend2: - store ptr @.str2974, ptr %retval + store ptr @.str4813, ptr %retval br label %ret ret: %t11 = load ptr, ptr %retval @@ -33821,7 +44995,7 @@ define ptr @fn_net_poll_sym() { entry: %retval = alloca ptr %t1 = alloca ptr - %t0 = call ptr @fn_find_extern(ptr @.str2975) + %t0 = call ptr @fn_find_extern(ptr @.str4814) store ptr %t0, ptr %t1 %t2 = load ptr, ptr %t1 %t3 = icmp ne ptr %t2, null @@ -33837,7 +45011,7 @@ then0: store ptr %t10, ptr %retval br label %ret ifend2: - store ptr @.str2976, ptr %retval + store ptr @.str4815, ptr %retval br label %ret ret: %t11 = load ptr, ptr %retval @@ -33855,8 +45029,8 @@ entry: %t44 = alloca ptr %t65 = alloca ptr %t71 = alloca ptr - call void @fn_emith(ptr @.str2977) - %t0 = call ptr @fn_find_extern(ptr @.str2978) + call void @fn_emith(ptr @.str4816) + %t0 = call ptr @fn_find_extern(ptr @.str4817) %t1 = icmp eq ptr %t0, null %t2 = zext i1 %t1 to i32 %t3 = icmp ne i32 %t2, 0 @@ -33867,13 +45041,13 @@ then0: ifend2: %t4 = call ptr @fn_net_poll_sym() store ptr %t4, ptr %t5 - call void @fn_emit(ptr @.str2979) - call void @fn_emit(ptr @.str2980) + call void @fn_emit(ptr @.str4818) + call void @fn_emit(ptr @.str4819) %t6 = load ptr, ptr %t5 call void @fn_emit(ptr %t6) - call void @fn_emit(ptr @.str2981) - call void @fn_emit(ptr @.str2982) - call void @fn_emit(ptr @.str2983) + call void @fn_emit(ptr @.str4820) + call void @fn_emit(ptr @.str4821) + call void @fn_emit(ptr @.str4822) store i32 0, ptr %t7 br label %wcond3 wcond3: @@ -33904,31 +45078,31 @@ then6: %t28 = load i32, ptr %t7 %t29 = call ptr @fn_itoa(i32 %t28) store ptr %t29, ptr %t30 - call void @fn_emit(ptr @.str2984) + call void @fn_emit(ptr @.str4823) %t31 = load ptr, ptr %t30 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str2985) + call void @fn_emit(ptr @.str4824) %t32 = load ptr, ptr %t21 %t33 = getelementptr inbounds %Cmp_Node, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %t33 %t35 = call i32 @fn_net_event_id(ptr %t34) %t36 = call ptr @fn_itoa(i32 %t35) call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str2986) - call void @fn_emit(ptr @.str2987) + call void @fn_emit(ptr @.str4825) + call void @fn_emit(ptr @.str4826) %t37 = load ptr, ptr %t30 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str2988) + call void @fn_emit(ptr @.str4827) %t38 = load ptr, ptr %t30 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str2989) + call void @fn_emit(ptr @.str4828) %t39 = load ptr, ptr %t30 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str2990) - call void @fn_emit(ptr @.str2991) + call void @fn_emit(ptr @.str4829) + call void @fn_emit(ptr @.str4830) %t40 = load ptr, ptr %t30 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str2992) + call void @fn_emit(ptr @.str4831) store i32 4, ptr %t41 store i32 0, ptr %t42 %t43 = call ptr @fn_buf_new() @@ -33959,29 +45133,29 @@ wbody10: %t64 = call ptr @fn_llty(ptr %t63) store ptr %t64, ptr %t65 %t66 = load ptr, ptr %t30 - %t67 = call ptr @fn_str_concat(ptr %t66, ptr @.str2993) + %t67 = call ptr @fn_str_concat(ptr %t66, ptr @.str4832) %t68 = load i32, ptr %t42 %t69 = call ptr @fn_itoa(i32 %t68) %t70 = call ptr @fn_str_concat(ptr %t67, ptr %t69) store ptr %t70, ptr %t71 - call void @fn_emit(ptr @.str2994) + call void @fn_emit(ptr @.str4833) %t72 = load ptr, ptr %t71 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str2995) + call void @fn_emit(ptr @.str4834) %t73 = load i32, ptr %t41 %t74 = call ptr @fn_itoa(i32 %t73) call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str2996) - call void @fn_emit(ptr @.str2997) + call void @fn_emit(ptr @.str4835) + call void @fn_emit(ptr @.str4836) %t75 = load ptr, ptr %t71 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str2998) + call void @fn_emit(ptr @.str4837) %t76 = load ptr, ptr %t65 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str2999) + call void @fn_emit(ptr @.str4838) %t77 = load ptr, ptr %t71 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str3000) + call void @fn_emit(ptr @.str4839) %t78 = load i32, ptr %t42 %t79 = icmp sgt i32 %t78, 0 %t80 = zext i1 %t79 to i32 @@ -33989,14 +45163,14 @@ wbody10: br i1 %t81, label %then12, label %ifend14 then12: %t82 = load ptr, ptr %t44 - call void @fn_buf_puts(ptr %t82, ptr @.str3001) + call void @fn_buf_puts(ptr %t82, ptr @.str4840) br label %ifend14 ifend14: %t83 = load ptr, ptr %t44 %t84 = load ptr, ptr %t65 call void @fn_buf_puts(ptr %t83, ptr %t84) %t85 = load ptr, ptr %t44 - call void @fn_buf_puts(ptr %t85, ptr @.str3002) + call void @fn_buf_puts(ptr %t85, ptr @.str4841) %t86 = load ptr, ptr %t44 %t87 = load ptr, ptr %t71 call void @fn_buf_puts(ptr %t86, ptr %t87) @@ -34019,21 +45193,21 @@ ifend14: store i32 %t102, ptr %t42 br label %wcond9 wend11: - call void @fn_emit(ptr @.str3003) + call void @fn_emit(ptr @.str4842) %t103 = load ptr, ptr %t21 %t104 = getelementptr inbounds %Cmp_Node, ptr %t103, i32 0, i32 1 %t105 = load ptr, ptr %t104 call void @fn_emit(ptr %t105) - call void @fn_emit(ptr @.str3004) + call void @fn_emit(ptr @.str4843) %t106 = load ptr, ptr %t44 %t107 = call ptr @fn_buf_str(ptr %t106) call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str3005) - call void @fn_emit(ptr @.str3006) - call void @fn_emit(ptr @.str3007) + call void @fn_emit(ptr @.str4844) + call void @fn_emit(ptr @.str4845) + call void @fn_emit(ptr @.str4846) %t108 = load ptr, ptr %t30 call void @fn_emit(ptr %t108) - call void @fn_emit(ptr @.str3008) + call void @fn_emit(ptr @.str4847) br label %ifend8 ifend8: %t109 = load i32, ptr %t7 @@ -34041,8 +45215,8 @@ ifend8: store i32 %t110, ptr %t7 br label %wcond3 wend5: - call void @fn_emit(ptr @.str3009) - call void @fn_emit(ptr @.str3010) + call void @fn_emit(ptr @.str4848) + call void @fn_emit(ptr @.str4849) br label %ret ret: ret void @@ -34135,7 +45309,7 @@ ifend13: %t51 = icmp ne i32 %t50, 0 br i1 %t51, label %then14, label %ifend16 then14: - call void @fn_emith(ptr @.str3011) + call void @fn_emith(ptr @.str4850) call void @fn_emit_net_pump() br label %ifend16 ifend16: @@ -34155,7 +45329,7 @@ entry: %t3 = load ptr, ptr %t2 store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - %t6 = call i32 @fn_str_eq(ptr %t5, ptr @.str3012) + %t6 = call i32 @fn_str_eq(ptr %t5, ptr @.str4851) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: @@ -34163,7 +45337,7 @@ then0: br label %ret ifend2: %t8 = load ptr, ptr %t4 - %t9 = call i32 @fn_str_eq(ptr %t8, ptr @.str3013) + %t9 = call i32 @fn_str_eq(ptr %t8, ptr @.str4852) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then3, label %ifend5 then3: @@ -34171,7 +45345,7 @@ then3: br label %ret ifend5: %t11 = load ptr, ptr %t4 - %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str3014) + %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str4853) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then6, label %ifend8 then6: @@ -34179,7 +45353,7 @@ then6: br label %ret ifend8: %t14 = load ptr, ptr %t4 - %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str3015) + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str4854) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then9, label %ifend11 then9: @@ -34187,7 +45361,7 @@ then9: br label %ret ifend11: %t17 = load ptr, ptr %t4 - %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str3016) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str4855) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then12, label %ifend14 then12: @@ -34195,7 +45369,7 @@ then12: br label %ret ifend14: %t20 = load ptr, ptr %t4 - %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str3017) + %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str4856) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then15, label %ifend17 then15: @@ -34203,7 +45377,7 @@ then15: br label %ret ifend17: %t23 = load ptr, ptr %t4 - %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str3018) + %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str4857) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then18, label %ifend20 then18: @@ -34701,7 +45875,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 @.str3019) + %t78 = call ptr @fn_ui_prop(ptr %t77, ptr @.str4858) store ptr %t78, ptr %t79 %t80 = load ptr, ptr %t79 %t81 = icmp ne ptr %t80, null @@ -34830,18 +46004,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 @.str3020) + call void @fn_emit(ptr @.str4859) %t3 = load i32, ptr %t0 %t4 = call ptr @fn_itoa(i32 %t3) call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str3021) + call void @fn_emit(ptr @.str4860) %t5 = load i32, ptr %t1 %t6 = call ptr @fn_itoa(i32 %t5) call void @fn_emit(ptr %t6) - call void @fn_emit(ptr @.str3022) + call void @fn_emit(ptr @.str4861) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str3023) + call void @fn_emit(ptr @.str4862) br label %ret ret: ret void @@ -34853,7 +46027,7 @@ entry: %t0 = alloca ptr store ptr %arg_k, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str3024) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str4863) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: @@ -34861,7 +46035,7 @@ then0: br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str3025) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str4864) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: @@ -34869,7 +46043,7 @@ then3: br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str3026) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str4865) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: @@ -34877,7 +46051,7 @@ then6: br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str3027) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str4866) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: @@ -34885,7 +46059,7 @@ then9: br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str3028) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str4867) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: @@ -34893,7 +46067,7 @@ then12: br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str3029) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str4868) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: @@ -34901,7 +46075,7 @@ then15: br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str3030) + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str4869) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: @@ -34909,7 +46083,7 @@ then18: br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str3031) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str4870) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: @@ -34917,7 +46091,7 @@ then21: br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str3032) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str4871) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: @@ -34925,7 +46099,7 @@ then24: br label %ret ifend26: %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str3033) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str4872) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then27, label %ifend29 then27: @@ -34933,7 +46107,7 @@ then27: br label %ret ifend29: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str3034) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str4873) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then30, label %ifend32 then30: @@ -34941,7 +46115,7 @@ then30: br label %ret ifend32: %t34 = load ptr, ptr %t0 - %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str3035) + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str4874) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then33, label %ifend35 then33: @@ -34949,7 +46123,7 @@ then33: br label %ret ifend35: %t37 = load ptr, ptr %t0 - %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str3036) + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str4875) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then36, label %ifend38 then36: @@ -34957,7 +46131,7 @@ then36: br label %ret ifend38: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str3037) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str4876) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then39, label %ifend41 then39: @@ -35006,13 +46180,13 @@ entry: store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t1 store ptr %t5, ptr @g_code - call void @fn_emit(ptr @.str3038) + call void @fn_emit(ptr @.str4877) %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 @.str3039) + call void @fn_emit(ptr @.str4878) store i32 0, ptr %t10 br label %wcond0 wcond0: @@ -35055,7 +46229,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 @.str3040) + call void @fn_ll_ui_set(i32 %t43, i32 17, ptr @.str4879) br label %ifend5 ifend5: store i32 0, ptr %t44 @@ -35094,7 +46268,7 @@ wbody7: %t73 = load ptr, ptr %t72 store ptr %t73, ptr %t74 %t75 = load ptr, ptr %t70 - %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str3041) + %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str4880) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then9, label %ifend11 then9: @@ -35104,34 +46278,34 @@ then9: br label %wcond6 ifend11: %t80 = load ptr, ptr %t70 - %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str3042) + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str4881) %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 @.str3043) + call void @fn_emit(ptr @.str4882) %t86 = load i32, ptr %t10 %t87 = call ptr @fn_itoa(i32 %t86) call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str3044) + call void @fn_emit(ptr @.str4883) %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 @.str3045) + call void @fn_emit(ptr @.str4884) br label %ifend14 else13: %t92 = load ptr, ptr %t70 - %t93 = call i32 @fn_str_eq(ptr %t92, ptr @.str3046) + %t93 = call i32 @fn_str_eq(ptr %t92, ptr @.str4885) %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_str_eq(ptr %t96, ptr @.str3047) + %t97 = call i32 @fn_str_eq(ptr %t96, ptr @.str4886) %t98 = icmp ne i32 %t97, 0 %t99 = zext i1 %t98 to i32 store i32 %t99, ptr %t91 @@ -35147,12 +46321,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_str_concat(ptr @.str3048, ptr %t107) - %t109 = call ptr @fn_str_concat(ptr %t108, ptr @.str3049) + %t108 = call ptr @fn_str_concat(ptr @.str4887, ptr %t107) + %t109 = call ptr @fn_str_concat(ptr %t108, ptr @.str4888) %t110 = call ptr @fn_emit_bind(ptr %t109) store ptr %t110, ptr %t111 %t112 = load ptr, ptr %t70 - %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str3050) + %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str4889) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then20, label %else21 then20: @@ -35169,7 +46343,7 @@ ifend22: br label %ifend19 else18: %t119 = load ptr, ptr %t70 - %t120 = call i32 @fn_str_eq(ptr %t119, ptr @.str3051) + %t120 = call i32 @fn_str_eq(ptr %t119, ptr @.str4890) %t121 = icmp ne i32 %t120, 0 br i1 %t121, label %then23, label %else24 then23: @@ -35185,7 +46359,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_str_eq(ptr %t131, ptr @.str3052) + %t132 = call i32 @fn_str_eq(ptr %t131, ptr @.str4891) %t133 = icmp ne i32 %t132, 0 br i1 %t133, label %then29, label %ifend31 then29: @@ -35195,7 +46369,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_str_eq(ptr %t136, ptr @.str3053) + %t137 = call i32 @fn_str_eq(ptr %t136, ptr @.str4892) %t138 = icmp ne i32 %t137, 0 br i1 %t138, label %then32, label %ifend34 then32: @@ -35259,7 +46433,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 @.str3054) + call void @fn_ll_ui_set(i32 %t177, i32 6, ptr @.str4893) br label %ifend42 ifend42: br label %ifend37 @@ -35282,14 +46456,14 @@ wend8: wend2: %t182 = load ptr, ptr %t4 store ptr %t182, ptr @g_code - call void @fn_emit(ptr @.str3055) + call void @fn_emit(ptr @.str4894) %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 @.str3056) + call void @fn_emit(ptr @.str4895) br label %ret ret: ret void @@ -35320,7 +46494,7 @@ wbody1: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str3057) + call void @fn_emit(ptr @.str4896) br label %ifend5 ifend5: %t15 = load ptr, ptr %t0 @@ -35335,7 +46509,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 @.str3058) + call void @fn_emit(ptr @.str4897) %t26 = load ptr, ptr %t0 %t27 = getelementptr inbounds %Cmp_Node, ptr %t26, i32 0, i32 7 %t28 = load ptr, ptr %t27 @@ -35389,19 +46563,19 @@ entry: %t11 = call ptr @fn_llty(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t12 - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str3059) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str4898) %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 @.str3060) + call void @fn_buf_puts(ptr %t18, ptr @.str4899) %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 @.str3061) + call void @fn_buf_puts(ptr %t21, ptr @.str4900) br label %ifend2 ifend2: store i32 0, ptr %t22 @@ -35433,21 +46607,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 @.str3062) + call void @fn_emit(ptr @.str4901) %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 @.str3063) + call void @fn_emit(ptr @.str4902) %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 @.str3064) + call void @fn_emit(ptr @.str4903) %t54 = load ptr, ptr %t46 call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str3065) + call void @fn_emit(ptr @.str4904) %t55 = load ptr, ptr %t40 %t56 = getelementptr inbounds %Cmp_Node, ptr %t55, i32 0, i32 1 %t57 = load ptr, ptr %t56 @@ -35471,53 +46645,53 @@ wend5: %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str3066) + call void @fn_emit(ptr @.str4905) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str3067) + call void @fn_emit(ptr @.str4906) %t71 = load ptr, ptr %t12 - %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str3068) + %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str4907) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then9, label %else10 then9: - call void @fn_emit(ptr @.str3069) + call void @fn_emit(ptr @.str4908) br label %ifend11 else10: %t74 = load ptr, ptr %t12 - %t75 = call ptr @fn_str_concat(ptr @.str3070, ptr %t74) - %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str3071) + %t75 = call ptr @fn_str_concat(ptr @.str4909, ptr %t74) + %t76 = call ptr @fn_str_concat(ptr %t75, ptr @.str4910) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str3072) + call void @fn_emit(ptr @.str4911) %t79 = load ptr, ptr %t12 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str3073) + call void @fn_emit(ptr @.str4912) %t80 = load ptr, ptr %t78 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str3074) + call void @fn_emit(ptr @.str4913) br label %ifend11 ifend11: %t81 = load ptr, ptr %t8 store ptr %t81, ptr @g_code - call void @fn_emit(ptr @.str3075) + call void @fn_emit(ptr @.str4914) %t82 = load ptr, ptr %t12 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str3076) + call void @fn_emit(ptr @.str4915) %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 @.str3077) + call void @fn_emit(ptr @.str4916) %t86 = load ptr, ptr %t0 call void @fn_emit_params_sig(ptr %t86) - call void @fn_emit(ptr @.str3078) + call void @fn_emit(ptr @.str4917) %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 @.str3079) + call void @fn_emit(ptr @.str4918) br label %ret ret: ret void @@ -35535,7 +46709,7 @@ entry: store i32 0, ptr @g_g_term call void @fn_loc_reset() store i32 0, ptr @g_nloop - store ptr @.str3080, ptr @g_ret_ty + store ptr @.str4919, ptr @g_ret_ty %t1 = call ptr @fn_buf_new() store ptr %t1, ptr %t2 %t3 = call ptr @fn_buf_new() @@ -35545,10 +46719,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 @.str3081) - call void @fn_emit(ptr @.str3082) - call void @fn_emit(ptr @.str3083) - call void @fn_emit(ptr @.str3084) + call void @fn_buf_puts(ptr %t7, ptr @.str4920) + call void @fn_emit(ptr @.str4921) + call void @fn_emit(ptr @.str4922) + call void @fn_emit(ptr @.str4923) %t8 = load ptr, ptr %t0 %t9 = getelementptr inbounds %Cmp_Node, ptr %t8, i32 0, i32 4 %t10 = load ptr, ptr %t9 @@ -35559,26 +46733,26 @@ entry: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str3085) + call void @fn_emit(ptr @.str4924) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str3086) - %t15 = call ptr @fn_emit_bind(ptr @.str3087) + call void @fn_emit(ptr @.str4925) + %t15 = call ptr @fn_emit_bind(ptr @.str4926) store ptr %t15, ptr %t16 - call void @fn_emit(ptr @.str3088) + call void @fn_emit(ptr @.str4927) %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str3089) + call void @fn_emit(ptr @.str4928) %t18 = load ptr, ptr %t5 store ptr %t18, ptr @g_code - call void @fn_emit(ptr @.str3090) + call void @fn_emit(ptr @.str4929) %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 @.str3091) + call void @fn_emit(ptr @.str4930) br label %ret ret: ret void @@ -35917,6 +47091,27 @@ then55: call void @fn_emit_str_slice() br label %ifend57 ifend57: + %t175 = load i32, ptr @g_g_uses_mathrt + %t176 = icmp ne i32 %t175, 0 + br i1 %t176, label %then58, label %ifend60 +then58: + call void @fn_emit_math_prelude() + br label %ifend60 +ifend60: + %t177 = load i32, ptr @g_g_uses_textrt + %t178 = icmp ne i32 %t177, 0 + br i1 %t178, label %then61, label %ifend63 +then61: + call void @fn_emit_text_prelude() + br label %ifend63 +ifend63: + %t179 = load i32, ptr @g_g_uses_textrt2 + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then64, label %ifend66 +then64: + call void @fn_emit_text2_prelude() + br label %ifend66 +ifend66: br label %ret ret: ret void @@ -35965,7 +47160,7 @@ then0: br label %ret ifend2: %t29 = load ptr, ptr %t0 - %t30 = call ptr @fopen(ptr %t29, ptr @.str3092) + %t30 = call ptr @fopen(ptr %t29, ptr @.str4931) store ptr %t30, ptr %t31 %t32 = load ptr, ptr %t31 %t33 = icmp eq ptr %t32, null @@ -36075,7 +47270,7 @@ then0: %t11 = sub i32 %t10, 6 %t12 = load i32, ptr %t4 %t13 = call ptr @fn_str_slice(ptr %t9, i32 %t11, i32 %t12) - %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str3093) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str4932) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then3, label %ifend5 then3: @@ -36161,7 +47356,7 @@ then3: br label %ret ifend5: %t20 = load ptr, ptr %t0 - %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str3094) + %t21 = call ptr @fn_str_concat(ptr %t20, ptr @.str4933) store ptr %t21, ptr %retval br label %ret ret: @@ -36227,7 +47422,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_str_eq(ptr %t10, ptr @.str3095) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str4934) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then0, label %ifend2 then0: @@ -36250,7 +47445,7 @@ wbody4: %t22 = load ptr, ptr %t21 store ptr %t22, ptr %t23 %t24 = load ptr, ptr %t23 - %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str3096) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str4935) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then6, label %else7 then6: @@ -36258,7 +47453,7 @@ then6: br label %ifend8 else7: %t27 = load ptr, ptr %t23 - %t28 = call i32 @fn_str_eq(ptr %t27, ptr @.str3097) + %t28 = call i32 @fn_str_eq(ptr %t27, ptr @.str4936) %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then9, label %else10 then9: @@ -36266,7 +47461,7 @@ then9: br label %ifend11 else10: %t30 = load ptr, ptr %t23 - %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str3098) + %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str4937) %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then12, label %else13 then12: @@ -36274,7 +47469,7 @@ then12: br label %ifend14 else13: %t33 = load ptr, ptr %t23 - %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str3099) + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str4938) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then15, label %else16 then15: @@ -36282,7 +47477,7 @@ then15: br label %ifend17 else16: %t36 = load ptr, ptr %t23 - %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str3100) + %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str4939) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then18, label %else19 then18: @@ -36290,7 +47485,7 @@ then18: br label %ifend20 else19: %t39 = load ptr, ptr %t23 - %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str3101) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str4940) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then21, label %else22 then21: @@ -36298,7 +47493,7 @@ then21: br label %ifend23 else22: %t42 = load ptr, ptr %t23 - %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str3102) + %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str4941) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then24, label %else25 then24: @@ -36331,8 +47526,8 @@ else25: br i1 %t62, label %then30, label %else31 then30: %t63 = load ptr, ptr %t23 - %t64 = call ptr @fn_str_concat(ptr @.str3103, ptr %t63) - %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str3104) + %t64 = call ptr @fn_str_concat(ptr @.str4942, ptr %t63) + %t65 = call ptr @fn_str_concat(ptr %t64, ptr @.str4943) store ptr %t65, ptr %t66 %t67 = load ptr, ptr @__stderrp %t68 = load ptr, ptr %t66 @@ -36373,7 +47568,7 @@ wend5: %t81 = icmp ne i32 %t80, 0 br i1 %t81, label %then33, label %ifend35 then33: - call void @fn_die(ptr @.str3105) + call void @fn_die(ptr @.str4944) br label %ifend35 ifend35: %t82 = load ptr, ptr %t0 @@ -36385,7 +47580,7 @@ ifend35: %t88 = icmp ne i32 %t87, 0 br i1 %t88, label %then36, label %ifend38 then36: - call void @fn_die(ptr @.str3106) + call void @fn_die(ptr @.str4945) br label %ifend38 ifend38: %t89 = load ptr, ptr %t0 @@ -36493,7 +47688,7 @@ then60: %t141 = load ptr, ptr %t0 %t142 = call ptr @fn_base_name(ptr %t141) %t143 = call ptr @fn_strip_ludic(ptr %t142) - %t144 = call ptr @fn_str_concat(ptr @.str3107, ptr %t143) + %t144 = call ptr @fn_str_concat(ptr @.str4946, ptr %t143) store ptr %t144, ptr %t1 br label %ifend62 ifend62: @@ -36509,12 +47704,12 @@ ifend62: br i1 %t153, label %then63, label %ifend65 then63: %t154 = load ptr, ptr %t147 - %t155 = call ptr @fn_str_concat(ptr @.str3108, ptr %t154) + %t155 = call ptr @fn_str_concat(ptr @.str4947, ptr %t154) %t156 = call i32 @system(ptr %t155) br label %ifend65 ifend65: %t157 = load ptr, ptr %t1 - %t158 = call ptr @fn_str_concat(ptr %t157, ptr @.str3109) + %t158 = call ptr @fn_str_concat(ptr %t157, ptr @.str4948) store ptr %t158, ptr %t159 %t160 = load ptr, ptr %t159 %t161 = call i32 @fn_ir_flush(ptr %t160) @@ -36523,20 +47718,20 @@ ifend65: %t164 = icmp ne i32 %t163, 0 br i1 %t164, label %then66, label %ifend68 then66: - call void @fn_die(ptr @.str3110) + call void @fn_die(ptr @.str4949) br label %ifend68 ifend68: - %t165 = call ptr @fn_getenv_or(ptr @.str3111, ptr @.str3112) + %t165 = call ptr @fn_getenv_or(ptr @.str4950, ptr @.str4951) store ptr %t165, ptr %t166 %t167 = load ptr, ptr @L_argv %t168 = getelementptr ptr, ptr %t167, i32 0 %t169 = load ptr, ptr %t168 %t170 = call ptr @fn_dir_of(ptr %t169) - %t171 = call ptr @fn_getenv_or(ptr @.str3113, ptr %t170) + %t171 = call ptr @fn_getenv_or(ptr @.str4952, ptr %t170) %t172 = call ptr @fn_ensure_slash(ptr %t171) store ptr %t172, ptr %t173 %t174 = load ptr, ptr %t166 - %t175 = call ptr @fn_str_concat(ptr %t174, ptr @.str3114) + %t175 = call ptr @fn_str_concat(ptr %t174, ptr @.str4953) %t176 = load ptr, ptr %t159 %t177 = call ptr @fn_str_concat(ptr %t175, ptr %t176) store ptr %t177, ptr %t178 @@ -36545,18 +47740,18 @@ ifend68: br i1 %t180, label %then69, label %ifend71 then69: %t181 = load ptr, ptr %t173 - %t182 = call ptr @fn_path_join(ptr %t181, ptr @.str3115) + %t182 = call ptr @fn_path_join(ptr %t181, ptr @.str4954) store ptr %t182, ptr %t183 %t184 = load ptr, ptr %t178 - %t185 = call ptr @fn_str_concat(ptr %t184, ptr @.str3116) + %t185 = call ptr @fn_str_concat(ptr %t184, ptr @.str4955) %t186 = load ptr, ptr %t183 %t187 = call ptr @fn_str_concat(ptr %t185, ptr %t186) - %t188 = call ptr @fn_str_concat(ptr %t187, ptr @.str3117) + %t188 = call ptr @fn_str_concat(ptr %t187, ptr @.str4956) store ptr %t188, ptr %t178 br label %ifend71 ifend71: %t189 = load ptr, ptr %t178 - %t190 = call ptr @fn_str_concat(ptr %t189, ptr @.str3118) + %t190 = call ptr @fn_str_concat(ptr %t189, ptr @.str4957) %t191 = load ptr, ptr %t1 %t192 = call ptr @fn_str_concat(ptr %t190, ptr %t191) store ptr %t192, ptr %t178 @@ -36570,7 +47765,7 @@ ifend71: br i1 %t199, label %then72, label %ifend74 then72: %t200 = load ptr, ptr %t159 - %t201 = call ptr @fn_str_concat(ptr @.str3119, ptr %t200) + %t201 = call ptr @fn_str_concat(ptr @.str4958, ptr %t200) %t202 = call i32 @system(ptr %t201) br label %ifend74 ifend74: @@ -36580,7 +47775,7 @@ ifend74: %t206 = icmp ne i32 %t205, 0 br i1 %t206, label %then75, label %ifend77 then75: - call void @fn_die(ptr @.str3120) + call void @fn_die(ptr @.str4959) br label %ifend77 ifend77: %t207 = load i32, ptr %t6 diff --git a/selfhost/reseed.sh b/selfhost/reseed.sh deleted file mode 100755 index 935e08cf..00000000 --- a/selfhost/reseed.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# reseed.sh — regenerate the checked-in IR seed after a deliberate change to the -# self-host compiler. Uses the CURRENT seed (C-free) to produce the new one, so -# the C compiler is not reintroduced; falls back to the C ludicc if no seed -# builds. Always verify with ./selfhost/bootstrap-cfree.sh afterwards. -set -eu -cd "$(dirname "$0")/.." -CC="${LUDIC_CC:-clang}" -B=build/cfree; mkdir -p "$B" -FRAGS="selfhost/str.ludic selfhost/buf.ludic selfhost/io.ludic selfhost/ast.ludic -selfhost/lex.ludic selfhost/parse.ludic selfhost/parse_game.ludic selfhost/emit_core.ludic selfhost/emit_head.ludic -selfhost/emit_addr.ludic selfhost/emit_intrin.ludic selfhost/emit_intrin2.ludic selfhost/emit_math.ludic selfhost/emit_new.ludic -selfhost/emit_expr.ludic selfhost/emit_stmt.ludic selfhost/emit_ecs.ludic selfhost/emit_query.ludic selfhost/emit_spawn.ludic selfhost/emit_game.ludic selfhost/emit_machine.ludic selfhost/emit_save.ludic -selfhost/emit_net.ludic selfhost/emit_ui.ludic selfhost/emit_decl.ludic selfhost/main.ludic" -{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" -if $CC selfhost/ludicc.seed.ll -o "$B/sh_old" 2>/dev/null; then - # compile once with the old seed, then AGAIN with the freshly built one so the - # seed is a fixed point of the NEW compiler, not a one-step image of the old. - "$B/sh_old" "$B/selfhost.ludic" > "$B/step1.ll" - $CC "$B/step1.ll" -o "$B/sh_new" - "$B/sh_new" "$B/selfhost.ludic" > selfhost/ludicc.seed.ll -else - echo "seed does not build; reseeding from the C ludicc" - ./selfhost/build.sh build/ludicc "$B/sh_c" - "$B/sh_c" "$B/selfhost.ludic" > selfhost/ludicc.seed.ll -fi -echo "reseeded: $(wc -l < selfhost/ludicc.seed.ll | tr -d ' ') lines" diff --git a/selfhost/test.sh b/selfhost/test.sh deleted file mode 100755 index 39d8faa6..00000000 --- a/selfhost/test.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# test.sh — the self-hosting suite: the compiler is correct (compiles diverse -# programs to working binaries) and self-reproducing (the bootstrap fixpoint). -set -u -cd "$(dirname "$0")/.." -CC="${LUDIC_CC:-clang}" -PASS=0; FAIL=0 -ok() { printf " \033[32mPASS\033[0m %s\n" "$1"; PASS=$((PASS+1)); } -bad() { printf " \033[31mFAIL\033[0m %s\n" "$1"; FAIL=$((FAIL+1)); } - -echo "== build the self-host compiler (via the C ludicc) ==" -[ -x build/ludicc ] || ./build.sh >/dev/null 2>&1 -./build.sh examples/snake.ludic --headless >/dev/null 2>&1 && [ -x build/ludicc ] && ok "compiler builds from the IR seed (no C)" || { bad "self-host build"; exit 1; } - -echo "== the self-host compiler is correct ==" -run_case() { # name expected - local n="$1" exp="$2" - ./build/ludicc "selfhost/tests/$n.ludic" > "/tmp/sh_$n.ll" 2>"/tmp/sh_$n.err" || { bad "$n: self-host errored: $(head -1 /tmp/sh_$n.err)"; return; } - $CC "/tmp/sh_$n.ll" -o "/tmp/sh_$n" 2>/dev/null || { bad "$n: IR did not assemble"; return; } - local got; got=$("/tmp/sh_$n" 2>/dev/null | tr '\n' ' ' | sed 's/ *$//') - [ "$got" = "$exp" ] && ok "$n ($got)" || bad "$n: got [$got] want [$exp]" -} -run_case structs "7 9 109 2 42" -run_case slices "0 20 361 777" -run_case control "55 4 15 1" -run_case match_bits "1 2 9 16 4 9999" -run_case fixed "2 3 0 6 1" - -echo "== the self-host compiler compiles real games (vs golden output) ==" -# The golden PPMs in selfhost/golden/ were produced by the original C compiler. -# The self-hosted compiler must reproduce them exactly. -game_case() { # name keys - local n="$1" keys="$2" - ./selfhost/game-build.sh build/ludicc "examples/$n.ludic" "/tmp/ludic_${n}_sh" >/tmp/gb.out 2>&1 || { bad "$n: build ($(tail -1 /tmp/gb.out))"; return; } - printf '%s' "$keys" | "/tmp/ludic_${n}_sh" >/dev/null 2>&1; cp out.ppm "/tmp/${n}_sh.ppm" - cmp -s "selfhost/golden/$n.ppm" "/tmp/${n}_sh.ppm" && ok "$n matches the golden render" || bad "$n: differs from golden" -} -game_case snake "ddssaawwddss" -game_case menu "ssss" -game_case chronorift "ddddwwwwaassK" - -echo "== the bootstrap fixpoint (seeded from the C compiler) ==" -./selfhost/bootstrap.sh >/tmp/boot.out 2>&1 -if grep -q "FIXPOINT" /tmp/boot.out; then ok "gen2.ll == gen3.ll (compiler reproduces itself)"; else bad "fixpoint not reached"; cat /tmp/boot.out; fi - -echo "== the C-free bootstrap (from the checked-in IR seed, no C compiler) ==" -./selfhost/bootstrap-cfree.sh >/tmp/cfree.out 2>&1 -if grep -q "no C compiler" /tmp/cfree.out; then ok "seed.ll rebuilds the compiler and is its own fixed point"; else bad "C-free bootstrap failed (seed stale? run ./selfhost/reseed.sh)"; cat /tmp/cfree.out; fi - -echo -printf "== %d passed, %d failed ==\n" "$PASS" "$FAIL" -[ "$FAIL" -eq 0 ] diff --git a/selfhost/tests/color.ludic b/selfhost/tests/color.ludic new file mode 100644 index 00000000..cbb106e6 --- /dev/null +++ b/selfhost/tests/color.ludic @@ -0,0 +1,10 @@ +program T { + entry { + print(Color.rgb(255, 128, 64)) # 16744512 + print(Color.rgba(255, 128, 64, 64)) # 1090486336 + print(Color.with_alpha(0xFF8040, 64)) # 1090486336 + print(Color.lerp(0x000000, 0xFFFFFF, 0.5)) # 8355711 + print(Color.darken(0xFFFFFF, 0.5)) # 8355711 + print(Color.lighten(0x000000, 0.5)) # 8355711 + } +} diff --git a/selfhost/tests/easecollide.ludic b/selfhost/tests/easecollide.ludic new file mode 100644 index 00000000..70c2ce8a --- /dev/null +++ b/selfhost/tests/easecollide.ludic @@ -0,0 +1,22 @@ +program T { + entry { + print(Math.floor(Ease.in(0.5) * 1000.0)) # 250 + print(Math.floor(Ease.out(0.5) * 1000.0)) # 750 + print(Math.floor(Ease.in_out(0.5) * 1000.0)) # 500 + print(Math.floor(Ease.in(1.0) * 1000.0)) # 1000 + print(Math.floor(Ease.out(1.0) * 1000.0)) # 1000 + print(Math.floor(Ease.bounce(1.0) * 1000.0)) # 999 + print(Math.floor(Ease.bounce(0.5) * 1000.0)) # 765 + print(Math.floor(Ease.back(0.5) * 1000.0)) # -88 + print(Math.floor(Ease.back(1.0) * 1000.0)) # 1000 + print(Collide.rects(0, 0, 10, 10, 5, 5, 10, 10)) # 1 + print(Collide.rects(0, 0, 10, 10, 20, 20, 5, 5)) # 0 + print(Collide.point_rect(5, 5, 0, 0, 10, 10)) # 1 + print(Collide.point_rect(15, 5, 0, 0, 10, 10)) # 0 + print(Collide.point_rect(10, 5, 0, 0, 10, 10)) # 0 + print(Collide.circles(0, 0, 5, 6, 0, 5)) # 1 + print(Collide.circles(0, 0, 5, 20, 0, 5)) # 0 + print(Collide.rect_circle(0, 0, 10, 10, 15, 5, 6)) # 1 + print(Collide.rect_circle(0, 0, 10, 10, 20, 5, 6)) # 0 + } +} diff --git a/selfhost/tests/match_bits.ludic b/selfhost/tests/match_bits.ludic index f62792cd..196e8da3 100644 --- a/selfhost/tests/match_bits.ludic +++ b/selfhost/tests/match_bits.ludic @@ -11,6 +11,6 @@ program T { print(((4 | 1) & 6)) # 4 let p = bytes(16) p[1] = 9999 - print(p[1]) # 9999 + print(p[1]) # 15 (a byte buffer truncates: 9999 & 0xFF) } } diff --git a/selfhost/tests/math.ludic b/selfhost/tests/math.ludic new file mode 100644 index 00000000..8cea638d --- /dev/null +++ b/selfhost/tests/math.ludic @@ -0,0 +1,27 @@ +program T { + entry { + # min / max / abs / clamp, now reachable under the Math namespace + print(Math.min(3, 7)) # 3 + print(Math.max(3, 7)) # 7 + print(Math.abs(0 - 5)) # 5 + print(Math.clamp(12, 0, 10)) # 10 + + # sign -> -1 / 0 / 1 + print(Math.sign(0 - 4)) # -1 + print(Math.sign(0)) # 0 + print(Math.sign(9)) # 1 + + # floor / ceil / round on Q16.16 fixed + print(Math.floor(2.7)) # 2 + print(Math.ceil(2.1)) # 3 + print(Math.round(2.5)) # 3 + print(Math.round(2.4)) # 2 + + # lerp(0, 10, 0.5) = 5.0 + print(Math.floor(Math.lerp(0.0, 10.0, 0.5))) # 5 + # inverse_lerp(0, 10, 2.5) = 0.25 -> *100 = 25 + print(Math.floor(Math.inverse_lerp(0.0, 10.0, 2.5) * 100.0)) # 25 + # remap(5, [0..10] -> [0..100]) = 50.0 + print(Math.floor(Math.remap(5.0, 0.0, 10.0, 0.0, 100.0))) # 50 + } +} diff --git a/selfhost/tests/math2.ludic b/selfhost/tests/math2.ludic new file mode 100644 index 00000000..982b7590 --- /dev/null +++ b/selfhost/tests/math2.ludic @@ -0,0 +1,20 @@ +program T { + entry { + print(Math.floor(Math.sqrt(2.0) * 1000.0)) # 1414 + print(Math.floor(Math.sqrt(9.0))) # 3 + print(Math.floor(Math.sin(1.5707963) * 1000.0)) # ~999 (sin pi/2) + print(Math.floor(Math.cos(0.0) * 1000.0)) # ~999 (cos 0) + print(Math.floor(Math.sin(0.5235987) * 1000.0)) # ~499 (sin 30deg) + print(Math.floor(Math.hypot(3.0, 4.0))) # 5 + print(Math.floor(Math.dist(0.0, 0.0, 3.0, 4.0))) # 5 + print(Math.floor(Math.dist2(0.0, 0.0, 3.0, 4.0))) # 25 + print(Math.floor(Math.deg_to_rad(180.0) * 1000.0)) # 3142 + print(Math.floor(Math.rad_to_deg(3.1415926))) # 180 + print(Math.posmod(0 - 1, 5)) # 4 + print(Math.wrap(12, 0, 10)) # 2 + print(Math.ping_pong(13, 10)) # 7 + print(Math.floor(Math.snapped(2.3, 0.5) * 10.0)) # 25 + print(Math.floor(Math.move_toward(0.0, 10.0, 3.0) * 10.0)) # 30 + print(Math.floor(Math.smoothstep(0.0, 10.0, 5.0) * 1000.0)) # 500 + } +} diff --git a/selfhost/tests/math3.ludic b/selfhost/tests/math3.ludic new file mode 100644 index 00000000..84732ed6 --- /dev/null +++ b/selfhost/tests/math3.ludic @@ -0,0 +1,11 @@ +program T { + entry { + print(Math.round(Math.rad_to_deg(Math.atan2(1.0, 1.0)))) # 45 + print(Math.round(Math.rad_to_deg(Math.atan2(1.0, 0.0)))) # 90 + print(Math.round(Math.rad_to_deg(Math.atan2(0.0, 0.0 - 1.0)))) # 180 + print(Math.round(Math.rad_to_deg(Math.atan2(0.0 - 1.0, 0.0 - 1.0)))) # -135 + print(Math.round(Math.rad_to_deg(Math.asin(0.5)))) # 30 + print(Math.round(Math.rad_to_deg(Math.acos(0.5)))) # 60 + print(Math.round(Math.rad_to_deg(Math.asin(1.0)))) # 90 + } +} diff --git a/selfhost/tests/memsys.ludic b/selfhost/tests/memsys.ludic new file mode 100644 index 00000000..8ca250f5 --- /dev/null +++ b/selfhost/tests/memsys.ludic @@ -0,0 +1,19 @@ +program T { + entry { + let b = Mem.bytes(8) + Mem.poke(b, 0, 65) + Mem.poke(b, 1, 66) + print(Mem.peek(b, 0)) # 65 + print(Mem.peek(b, 1)) # 66 + Mem.fill(b, 0, 8) + print(Mem.peek(b, 0)) # 0 + let c = Mem.bytes(8) + Mem.poke(b, 3, 99) + Mem.copy(c, b, 8) + print(Mem.peek(c, 3)) # 99 + let w = Mem.words(4) + w[0] = 12345 + print(w[0]) # 12345 + print(Sys.arg_count()) # 1 + } +} diff --git a/selfhost/tests/textlist.ludic b/selfhost/tests/textlist.ludic new file mode 100644 index 00000000..cb143d2e --- /dev/null +++ b/selfhost/tests/textlist.ludic @@ -0,0 +1,44 @@ +program T { + entry { + # ---- List.* over a []int slice ---- + let xs = new []int + push(xs, 10) + push(xs, 20) + push(xs, 30) + print(List.len(xs)) # 3 + print(List.first(xs)) # 10 + print(List.last(xs)) # 30 + print(List.contains(xs, 20)) # 1 + print(List.contains(xs, 99)) # 0 + print(List.index_of(xs, 30)) # 2 + print(List.index_of(xs, 99)) # -1 + List.swap(xs, 0, 2) # [30, 20, 10] + print(List.first(xs)) # 30 + print(List.last(xs)) # 10 + List.reverse(xs) # [10, 20, 30] + print(List.first(xs)) # 10 + print(List.last(xs)) # 30 + print(List.pop(xs)) # 30 -> [10, 20] + print(List.len(xs)) # 2 + List.clear(xs) + print(List.len(xs)) # 0 + + # ---- Text.* over a str ---- + let s = "hello world" + print(Text.length(s)) # 11 + print(Text.char_at(s, 0)) # 104 ('h') + print(Text.starts_with(s, "hello")) # 1 + print(Text.starts_with(s, "world")) # 0 + print(Text.ends_with(s, "world")) # 1 + print(Text.ends_with(s, "hello")) # 0 + print(Text.contains(s, "lo w")) # 1 + print(Text.contains(s, "xyz")) # 0 + print(Text.index_of(s, "world")) # 6 + print(Text.index_of(s, "xyz")) # -1 + print(Text.to_int("42abc")) # 42 + print(Text.length(Text.slice(s, 0, 5))) # 5 + print(Text.equals(Text.slice(s, 0, 5), "hello")) # 1 + print(Text.length(Text.concat("ab", "cd"))) # 4 + print(Text.length(Text.from_int(1234))) # 4 + } +} diff --git a/selfhost/tests/textlist2.ludic b/selfhost/tests/textlist2.ludic new file mode 100644 index 00000000..a028569a --- /dev/null +++ b/selfhost/tests/textlist2.ludic @@ -0,0 +1,41 @@ +program T { + entry { + # ---- Text builders (upper/lower/trim/repeat/pad) ---- + print(Text.length(Text.upper("abc"))) # 3 + print(Text.equals(Text.upper("aBc"), "ABC")) # 1 + print(Text.equals(Text.lower("aBc"), "abc")) # 1 + print(Text.equals(Text.trim(" hi "), "hi")) # 1 + print(Text.length(Text.trim(" hi "))) # 2 + print(Text.equals(Text.repeat("ab", 3), "ababab")) # 1 + print(Text.length(Text.repeat("ab", 3))) # 6 + print(Text.equals(Text.pad_left("7", 3), " 7")) # 1 + print(Text.equals(Text.pad_right("7", 3), "7 ")) # 1 + print(Text.length(Text.pad_left("7", 3))) # 3 + print(Text.equals(Text.pad_left("toolong", 3), "toolong")) # 1 + + # ---- List insert/remove_at/remove/sort ---- + let xs = new []int + push(xs, 3); push(xs, 1); push(xs, 2) + List.sort(xs) + print(List.first(xs)) # 1 + print(List.last(xs)) # 3 + print(List.index_of(xs, 2)) # 1 + List.insert(xs, 1, 99) + print(List.len(xs)) # 4 + print(List.index_of(xs, 99)) # 1 + print(List.index_of(xs, 2)) # 2 + List.remove_at(xs, 0) + print(List.first(xs)) # 99 + print(List.len(xs)) # 3 + List.remove(xs, 2) + print(List.len(xs)) # 2 + print(List.contains(xs, 2)) # 0 + print(List.last(xs)) # 3 + let ys = new []int + push(ys, 5); push(ys, 2); push(ys, 8); push(ys, 1); push(ys, 9); push(ys, 3) + List.sort(ys) + print(List.first(ys)) # 1 + print(List.last(ys)) # 9 + print(List.index_of(ys, 5)) # 3 + } +} diff --git a/selfhost/tests/textsplit.ludic b/selfhost/tests/textsplit.ludic new file mode 100644 index 00000000..2536ba0b --- /dev/null +++ b/selfhost/tests/textsplit.ludic @@ -0,0 +1,17 @@ +program T { + entry { + print(Text.equals(Text.replace("a.b.c", ".", "-"), "a-b-c")) # 1 + print(Text.equals(Text.replace("hello", "l", "L"), "heLLo")) # 1 + print(Text.equals(Text.replace("hello", "x", "y"), "hello")) # 1 + let parts = Text.split("a,b,c", ",") + print(List.len(parts)) # 3 + print(Text.equals(parts[0], "a")) # 1 + print(Text.equals(parts[2], "c")) # 1 + let one = Text.split("noseps", ",") + print(List.len(one)) # 1 + print(Text.equals(one[0], "noseps")) # 1 + print(Text.equals(Text.join(parts, "-"), "a-b-c")) # 1 + print(Text.equals(Text.join(parts, ""), "abc")) # 1 + print(Text.equals(Text.join(Text.split("x/y/z", "/"), "/"), "x/y/z")) # 1 + } +} diff --git a/test.sh b/test.sh deleted file mode 100755 index 16a6f71b..00000000 --- a/test.sh +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/bash -# test.sh — the regression suite. The compiler is now written in Ludic -# (selfhost/) and built from a checked-in LLVM-IR seed with clang; there is no C -# compiler in the repo. This suite proves the compiler builds from the seed, -# compiles every example to the byte-exact golden render, self-hosts to a -# fixpoint, and rebuilds itself with no C compiler. -set -u -cd "$(dirname "$0")" -PASS=0; FAIL=0 -ok() { printf " \033[32mPASS\033[0m %s\n" "$1"; PASS=$((PASS+1)); } -bad() { printf " \033[31mFAIL\033[0m %s\n" "$1"; FAIL=$((FAIL+1)); } - -echo "== the compiler is written in Ludic, not C ==" -if [ -e compiler ] || ls compiler/*.c >/dev/null 2>&1; then bad "compiler/ C sources still present" -else ok "no C compiler in the repo (compiler/ removed; the compiler is selfhost/*.ludic)"; fi -CLEFT=$(find tools -name '*.c' 2>/dev/null | wc -l | tr -d ' ') -ok "the only C left is the editor tooling ($CLEFT files: ludic-fmt, ludic-lsp)" - -echo "== the compiler builds from the IR seed (no C compiler) ==" -rm -f build/ludicc -if ./build.sh examples/snake.ludic --headless >/dev/null 2>&1 && [ -x build/ludicc ]; then - ok "clang selfhost/ludicc.seed.ll -> build/ludicc" -else bad "compiler did not build from the seed"; fi - -echo "== every example compiles to its golden render ==" -gcase() { # name keys - local n="$1" keys="$2" - ./selfhost/game-build.sh build/ludicc "examples/$n.ludic" "/tmp/ludic_${n}_t" >/tmp/gc.out 2>&1 || { bad "$n: build ($(tail -1 /tmp/gc.out))"; return; } - printf '%s' "$keys" | "/tmp/ludic_${n}_t" >/dev/null 2>&1 - cmp -s "selfhost/golden/$n.ppm" out.ppm && ok "$n renders the golden frame" || bad "$n: render differs from golden" -} -gcase snake "ddssaawwddss" -gcase menu "ssss" -gcase chronorift "ddddwwwwaassK" - -echo "== self-hosting and the bootstrap fixpoints ==" -./selfhost/test.sh >/tmp/sh.out 2>&1 -if grep -q "gen2.ll == gen3.ll" /tmp/sh.out; then ok "the compiler reproduces itself (fixpoint)"; else bad "fixpoint"; fi -if grep -q "no C compiler" /tmp/sh.out; then ok "the compiler rebuilds itself from the seed, C-free"; else bad "C-free bootstrap"; fi -CORR=$(grep -c PASS /tmp/sh.out) -ok "self-host suite: $CORR checks passed (see ./selfhost/test.sh)" - -echo "== documented syntax stays compilable (guards against spec/compiler drift) ==" -# Compiles a feature example end-to-end (parse -> lower -> link). qdecl exercises -# a @Queries annotation with a per-property constraint and an `on:` model tag. -qsmoke() { # name - local n="$1" - if ./selfhost/game-build.sh build/ludicc "examples/$n.ludic" "/tmp/ludic_${n}_s" >/tmp/qs.out 2>&1; then - ok "$n compiles (@Queries desugars to S_QUERY)" - else bad "$n: $(tail -1 /tmp/qs.out)"; fi -} -qsmoke qdecl -# The annotation DSL: @Queries desugars to a query, @Computed inlines a derived -# field, @OnSpawn runs a constructor, @Handles parses. Check the composite output. -if ./selfhost/game-build.sh build/ludicc examples/annotations.ludic "/tmp/ludic_ann" >/tmp/ann.out 2>&1 \ - && [ "$(/tmp/ludic_ann /tmp/life.out 2>&1 \ - && [ "$(/tmp/ludic_life /tmp/tog.out 2>&1 \ - && [ "$(/tmp/ludic_tog /tmp/str.out 2>&1 \ - && [ "$(/tmp/ludic_str become (exit 2, enter 3), Draw 900, Step 201, Draw 900, Step 202 -# -> quit, Draw 900. -if ./selfhost/game-build.sh build/ludicc examples/scenes.ludic "/tmp/ludic_scn" >/tmp/scn.out 2>&1 \ - && [ "$(printf 'aaaaaaaaaa' | /tmp/ludic_scn | tr '\n' ' ')" = "1000 1 101 102 2 3 900 201 900 202 900 " ]; then - ok "scenes.ludic (scene/layer/on enter/on exit/become)" -else bad "scenes: $(tail -1 /tmp/scn.out)"; fi -# Structural attach/detach + @OnAttach/@OnDetach: attach seeds a property on a -# live entity and fires @OnAttach (5+10=15), one Shield matches (1), detach fires -# @OnDetach reading the outgoing value (5+20=25) then clears it (0). -if ./selfhost/game-build.sh build/ludicc examples/detach.ludic "/tmp/ludic_det" >/tmp/det.out 2>&1 \ - && [ "$(/tmp/ludic_det Despawned (drop loot 3+500), -# a survivor at quit -> Quit (skip loot 9+1000; no silent deaths). -if ./selfhost/game-build.sh build/ludicc examples/reason.ludic "/tmp/ludic_rsn" >/tmp/rsn.out 2>&1 \ - && [ "$(/tmp/ludic_rsn Flash 5, Guard 8; Hurt(10,20) -> 20, 30; Cleared -> 999; -# Hurt(amount:42) with entity defaulting to 0 -> 42, 42. Listeners run in -# declaration order; the whole thing desugars to a direct @ev_ call. -if ./selfhost/game-build.sh build/ludicc examples/events.ludic "/tmp/ludic_evt" >/tmp/evt.out 2>&1 \ - && [ "$(/tmp/ludic_evt "/tmp/$n.out" 2>&1 \ - && ${LUDIC_CC:-clang} -O2 "/tmp/$n.ll" -o "/tmp/ludic_$n" >>"/tmp/$n.out" 2>&1 || { bad "$n: build ($(tail -1 /tmp/$n.out))"; return; } - local got; got=$("/tmp/ludic_$n" 10, 32, 42. (Pure Ludic; was a C mod.) -netcase mod_events "10 32 42" -# NETWORKING N0–N6 (NETWORKING-DESIGN.md) — every phase is a self-contained Ludic -# program, driven and asserted from its own `entry`. No C host and no C compiled. -# The transport is the compiler's built-in loopback (an `extern fn` overrides it -# with a real socket in production), so a networked game runs with zero foreign code. -# N0 transport seam: net_send/net_poll — the built-in loopback (no extern host) -netcase net_echo "4 10 20 30 42" -# N1 world snapshot to a buffer: world_size/world_save/world_load (rollback substrate) -netcase net_snapshot "50 7 50" -# N2 @Sync: per-model serialize/apply, selective — Player syncs 12 bytes, max kept mutated -netcase net_sync "12 3 4 50 999" -# N3 @Owned: owner/set_owner/is_owner — fresh entity unowned, then assigned/tested -netcase net_owner "-1 7 0 1" -# N4 remote events (RPCs): @ToServer emit → wire → net_pump re-emits (5+3=8) -netcase net_rpc "0 8" -# N5 roles + drivable sim: @Server gated by set_role; tick_fixed() drives the phases -netcase net_roles "1 102" -# N6 blessed runtime end to end: RPC input → authority applies → replicate → reconcile -netcase net_demo "5 999 5" -# EV1 @Public hook promotion: a @Public @OnSpawn/@OnDespawn also emits the public -# event model__spawn / model__despawn, which native @On listeners (and -# foreign mods over the ABI) subscribe to. Two spawns -> Spawned 100,101; two -# despawns -> Died 200,201 (entity + reason(0) + 200). -if ./selfhost/game-build.sh build/ludicc examples/promote.ludic "/tmp/ludic_prm" >/tmp/prm.out 2>&1 \ - && [ "$(/tmp/ludic_prm model__spawn/despawn events)" -else bad "promote: $(tail -1 /tmp/prm.out)"; fi -# EV3 cancellable events: a `cancellable` event fires before an action; a listener -# `cancel`s it and the caller reads the verdict from `emit E(...)` as an -# expression. Armor vetoes hits over 10: emit(5)->0, emit(15)->1; applying only -# un-vetoed damage leaves hp at 92. -if ./selfhost/game-build.sh build/ludicc examples/cancel.ludic "/tmp/ludic_cnl" >/tmp/cnl.out 2>&1 \ - && [ "$(/tmp/ludic_cnl 7) -netcase world_scan "2 110" # EV2b count/kind/model_id — scan + identify by model -netcase world_spawn "1 42 1" # EV2b world_spawn — create an entity by model id -netcase world_mixed "99" # EV2b real struct offsets (qty after a ptr, byte 8) -netcase world_query "2 110" # EV2b world_query_next — iterate bearers of a property -# EV6 re-entrancy bound: Ping's listener emits Pong and Pong's emits Ping — an -# event cycle. The @ev_depth cap makes the nesting trap as an early return, so the -# program terminates deterministically (n=16 at the cap) instead of hanging. -if ./selfhost/game-build.sh build/ludicc examples/recurse.ludic "/tmp/ludic_rec" >/tmp/rec.out 2>&1 \ - && [ "$(/tmp/ludic_rec 1, fields 30/100, name resolves (1), other entity's write -# doesn't corrupt the first (still 30). -netcase world_dyn "0 1 30 100 1 30" -# EV1 for properties: @Public on @OnAttach/@OnDetach promotes to prop_

_attach / -# prop_

_detach, extending public events past models to properties. Attaching -# then detaching Shield on entity 0 -> Gained 300, Lost 400. -if ./selfhost/game-build.sh build/ludicc examples/prop_events.ludic "/tmp/ludic_pe" >/tmp/pe.out 2>&1 \ - && [ "$(/tmp/ludic_pe prop_

_attach/detach events)" -else bad "prop events: $(tail -1 /tmp/pe.out)"; fi -# EV1 for scenes: a `public` scene promotes on-enter/on-exit to scene__enter / -# scene__exit. Boot enters Menu (10, listener 1); `become Game` leaves Menu (20, -# listener 2) and enters Game (30, listener 3). -if ./selfhost/game-build.sh build/ludicc examples/scene_events.ludic "/tmp/ludic_se" >/tmp/se.out 2>&1 \ - && [ "$(/tmp/ludic_se scene__enter/exit events)" -else bad "scene events: $(tail -1 /tmp/se.out)"; fi -# EV1 for the program scope: @Public @OnStart/@OnQuit -> program_start/program_quit. -# Boot fires @OnStart(1) then program_start(100); shutdown fires @OnQuit(2) then -# program_quit(200) -> the top-level mod entry/exit points. -if ./selfhost/game-build.sh build/ludicc examples/program_events.ludic "/tmp/ludic_pge" >/tmp/pge.out 2>&1 \ - && [ "$(/tmp/ludic_pge program_start/quit)" -else bad "program events: $(tail -1 /tmp/pge.out)"; fi -# EV1 for layers (+ SCENES E2 layer toggle): a `public` layer + `enable/disable -# layer L` flips the layer (its handlers stop) and fires layer__show/hide. -# Frame 1 Draw(50) then disable->Hidden(2); frame 2 Draw gated off, enable->Shown(1); -# frame 3 Draw(50) then quit. Needs input frames, so feed keys. -if ./selfhost/game-build.sh build/ludicc examples/layer_events.ludic "/tmp/ludic_le" >/tmp/le.out 2>&1 \ - && [ "$(printf 'aaaa' | /tmp/ludic_le | tr '\n' ' ')" = "50 2 1 50 " ]; then - ok "layer_events.ludic (layer toggle + public layer -> layer__show/hide)" -else bad "layer events: $(tail -1 /tmp/le.out)"; fi -# --- Toolchain-agent CLI smoke tests append below this line --- -echo "== self-hosted front-end binaries (ludicc / ludic) ==" -# The two commands are one multi-call native binary built from the seed with -# clang alone. ludicc compiles; ludic compiles-and-runs. Each drives clang via -# the os_system intrinsic — no shell wrapper in between. -if ./build-cli.sh >/tmp/cli.out 2>&1 && [ -x ./ludicc ] && [ -x ./ludic ]; then - ok "build-cli.sh builds ./ludicc and ./ludic from the seed (clang-only)" -else bad "build-cli.sh: $(tail -1 /tmp/cli.out)"; fi - -# ludicc -o drives clang to a native binary; a game links windowed by default. -if ./ludicc examples/snake.ludic -o /tmp/cli_snake >/tmp/cli.out 2>&1 \ - && file /tmp/cli_snake 2>/dev/null | grep -q "Mach-O"; then - ok "ludicc app.ludic -o bin -> native executable" -else bad "ludicc -o: $(tail -1 /tmp/cli.out)"; fi - -# --emit-llvm stops at the IR. -if ./ludicc examples/snake.ludic --emit-llvm -o /tmp/cli_snake.ll >/tmp/cli.out 2>&1 \ - && head -1 /tmp/cli_snake.ll | grep -q "LLVM IR"; then - ok "ludicc --emit-llvm -> LLVM IR" -else bad "ludicc --emit-llvm: $(tail -1 /tmp/cli.out)"; fi - -# ludic compiles, runs, and forwards the program's exit code. -printf 'entry { exit(42) }\n' > /tmp/cli_exit.ludic -./ludic /tmp/cli_exit.ludic >/tmp/cli.out 2>&1 -if [ "$?" -eq 42 ]; then ok "ludic app.ludic -> compiles, runs, forwards exit code" -else bad "ludic run: expected exit 42, got $? ($(tail -1 /tmp/cli.out))"; fi - -echo -printf "== %d passed, %d failed ==\n" "$PASS" "$FAIL" -[ "$FAIL" -eq 0 ] diff --git a/tools/build-tools.sh b/tools/build-tools.sh deleted file mode 100755 index 5fbcea7b..00000000 --- a/tools/build-tools.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -# build-tools.sh — build the Ludic editor toolchain. -# -# ./tools/build-tools.sh -> build/ludic-fmt, build/ludic-lsp -# ./tools/build-tools.sh --test build, then run tools/test-tools.sh -# ./tools/build-tools.sh --install also symlink both into ~/.local/bin -# -# Both binaries are written in Ludic (tools/ludic-tools/fmt.ludic, lsp.ludic) and -# compiled by the Ludic compiler itself — no C is compiled. clang only assembles -# the emitted LLVM IR, the same floor the compiler stands on. The vocabulary the -# grammar/lexer share still lives in tools/ludic-tools/ludic_syntax.h (data, read -# by check-vocabulary.py); the tools carry their own copy of it in Ludic. -set -e -cd "$(dirname "$0")/.." - -CC="${LUDIC_CC:-clang}" -SRC=tools/ludic-tools -OUT=build - -mkdir -p "$OUT" - -# the Ludic compiler, assembled from the checked-in IR seed (C-free) -if [ ! -x "$OUT/ludicc" ] || [ selfhost/ludicc.seed.ll -nt "$OUT/ludicc" ]; then - echo "cc: selfhost/ludicc.seed.ll -> $OUT/ludicc (from the IR seed, no C compiler)" - $CC selfhost/ludicc.seed.ll -o "$OUT/ludicc" -fi - -build_ludic() { - local name="$1" src="$2" - if [ -x "$OUT/$name" ] && [ ! "$src" -nt "$OUT/$name" ] && [ ! "$OUT/ludicc" -nt "$OUT/$name" ]; then - echo "$name: up to date"; return - fi - echo "ludicc: $src -> $OUT/$name (Ludic -> LLVM IR -> binary, no C)" - "$OUT/ludicc" "$src" --emit-llvm -o "$OUT/$name.ll" >/dev/null 2>&1 \ - && $CC -O2 "$OUT/$name.ll" -o "$OUT/$name" \ - && rm -f "$OUT/$name.ll" || { echo "build failed: $name"; exit 1; } -} - -build_ludic ludic-fmt "$SRC/fmt.ludic" -build_ludic ludic-lsp "$SRC/lsp.ludic" - -# VS Code needs the grammar inside its own extension directory, so it gets a -# copy. A copy that can drift is the whole failure mode this toolchain is built -# to avoid, so it is refreshed here rather than maintained by hand, and -# test-tools.sh asserts the two are identical. -SHARED=tools/editors/shared -VSC=tools/editors/vscode -if [ -d "$VSC" ]; then - mkdir -p "$VSC/syntaxes" - for f in ludic.tmLanguage.json ludic.markdown-injection.json; do - cmp -s "$SHARED/$f" "$VSC/syntaxes/$f" || { cp "$SHARED/$f" "$VSC/syntaxes/$f"; echo "sync: $f -> $VSC/syntaxes/"; } - done - cmp -s "$SHARED/language-configuration.json" "$VSC/language-configuration.json" || { - cp "$SHARED/language-configuration.json" "$VSC/language-configuration.json" - echo "sync: language-configuration.json -> $VSC/" - } -fi - -if [ "$1" = "--install" ] || [ "$2" = "--install" ]; then - mkdir -p "$HOME/.local/bin" - ln -sf "$PWD/$OUT/ludic-fmt" "$HOME/.local/bin/ludic-fmt" - ln -sf "$PWD/$OUT/ludic-lsp" "$HOME/.local/bin/ludic-lsp" - echo "linked into ~/.local/bin (make sure it is on your PATH)" -fi - -if [ "$1" = "--test" ] || [ "$2" = "--test" ]; then - exec ./tools/test-tools.sh -fi - -echo "done. editors: see tools/editors/README.md" diff --git a/tools/docgen/check-impl.py b/tools/docgen/check-impl.py new file mode 100644 index 00000000..8fb52a96 --- /dev/null +++ b/tools/docgen/check-impl.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +"""Docs coverage, anchored to the implementation — not a hand-kept list. + +The failure mode this prevents: you add a feature to the language and forget to +document it. Nobody notices until someone goes looking for the docs that were +never written. So the set of things that MUST have a doc page is read straight +from the implementation, and every one is required to have a page (and every +namespace-method page is required to correspond to something real): + + * namespace methods selfhost/emit_expr.ludic `emit_ns_call` + the + `is__ns` predicates it delegates to (Math/Text/List) + * keywords tools/ludic-tools/ludic_syntax.h LUDIC_KW_* (minus + LUDIC_KW_RESERVED, which is not-yet-implemented) + * primitive types ludic_syntax.h LUDIC_TYPES + * phases ludic_syntax.h LUDIC_PHASES + +Coverage means: the symbol appears in the `tokens:` of some docs/language page. +For namespace methods that page is docs/language//-.md with +token `.`. Run: python3 tools/docgen/check-impl.py +""" +import os +import re +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +LANG = os.path.join(ROOT, "docs", "language") +problems = [] + + +def read(*parts): + with open(os.path.join(ROOT, *parts), encoding="utf-8") as fh: + return fh.read() + + +def fn_body(text, name): + """The source of `fn ` up to the next top-level `fn ` (or EOF).""" + m = re.search(r"^fn %s\b" % re.escape(name), text, re.M) + if not m: + return "" + rest = text[m.end():] + nxt = re.search(r"^fn ", rest, re.M) + return text[m.start(): m.end() + (nxt.start() if nxt else len(rest))] + + +def all_selfhost_source(): + src = "" + d = os.path.join(ROOT, "selfhost") + for fn in sorted(os.listdir(d)): + if fn.endswith(".ludic"): + src += read("selfhost", fn) + "\n" + return src + + +def compiler_ns_methods(): + """{Namespace: set(method)} the compiler actually dispatches on.""" + expr = read("selfhost", "emit_expr.ludic") + body = fn_body(expr, "emit_ns_call") + if not body: + problems.append("emit_ns_call not found in selfhost/emit_expr.ludic") + return {} + allsrc = all_selfhost_source() + result = {} + # each `if (ns == "X")` opens a block that runs to the next such marker + chunks = re.split(r'if \(ns == "', body) + for chunk in chunks[1:]: + mn = re.match(r'(\w+)"', chunk) + if not mn: + continue + ns = mn.group(1) + methods = set(re.findall(r'meth == "([A-Za-z_][A-Za-z0-9_]*)"', chunk)) + if not methods: + # delegated form: `if is__ns(meth) { return emit__ns(...) }` + pm = re.search(r"is_(\w+)_ns\(meth\)", chunk) + if pm: + pred = fn_body(allsrc, "is_%s_ns" % pm.group(1)) + methods = set(re.findall(r'meth == "([A-Za-z_][A-Za-z0-9_]*)"', pred)) + if methods: + result.setdefault(ns, set()).update(methods) + return result + + +def documented(): + """(tokens set, {(ns, member): id} for namespace-method pages).""" + tokens = set() + nsmethods = {} + for cat in sorted(os.listdir(LANG)): + cdir = os.path.join(LANG, cat) + if not os.path.isdir(cdir): + continue + for fn in os.listdir(cdir): + if not fn.endswith(".md") or fn == "_section.md": + continue + meta = {} + for line in read("docs", "language", cat, fn).split("\n"): + m = re.match(r"^(\w+):\s*(.*)$", line) + if m: + meta[m.group(1)] = m.group(2).strip() + if line.strip() == "---" and meta: + break + tokens.update(meta.get("tokens", "").split()) + if meta.get("kind") == "namespace-method" and meta.get("ns") and meta.get("member"): + nsmethods[(meta["ns"], meta["member"])] = meta.get("id", fn[:-3]) + return tokens, nsmethods + + +def vocab_sets(): + h = read("tools", "ludic-tools", "ludic_syntax.h") + + def clist(name): + m = re.search(r"\b" + name + r"\s*\[\s*\]\s*=\s*\{(.*?)\}\s*;", h, re.S) + if not m: + problems.append("ludic_syntax.h: %s not found" % name) + return set() + return set(re.findall(r'"([^"]+)"', m.group(1))) + + reserved = clist("LUDIC_KW_RESERVED") + keywords = (clist("LUDIC_KW_DECL") | clist("LUDIC_KW_CLAUSE") + | clist("LUDIC_KW_STMT")) - reserved + return keywords, clist("LUDIC_TYPES"), clist("LUDIC_PHASES") + + +def main(): + ns_impl = compiler_ns_methods() + tokens, ns_doc = documented() + + # 1) every implemented namespace method has a page with the right token + for ns, methods in sorted(ns_impl.items()): + for meth in sorted(methods): + page = os.path.join(LANG, ns.lower(), "%s-%s.md" % (ns.lower(), meth)) + if (ns, meth) not in ns_doc: + problems.append("undocumented %s.%s — add %s (tokens: %s.%s)" + % (ns, meth, os.path.relpath(page, ROOT), ns, meth)) + elif "%s.%s" % (ns, meth) not in tokens: + problems.append("%s.%s documented but its page lacks that `tokens:` entry" % (ns, meth)) + + # 2) every documented namespace method corresponds to real dispatch + for (ns, meth), sid in sorted(ns_doc.items()): + if meth not in ns_impl.get(ns, set()): + problems.append("stale doc %s: %s.%s is not dispatched by the compiler" % (sid, ns, meth)) + + # 3) every implemented keyword / type / phase is documented + keywords, types, phases = vocab_sets() + for label, names in (("keyword", keywords), ("type", types), ("phase", phases)): + for n in sorted(names): + if n not in tokens: + problems.append("undocumented %s: %s (no docs/language page lists it in `tokens:`)" % (label, n)) + + n = sum(len(v) for v in ns_impl.values()) + if problems: + print("docs-vs-implementation drift:", file=sys.stderr) + for p in problems: + print(" -", p, file=sys.stderr) + return 1 + print("docs cover the implementation: %d namespace methods, %d keywords, %d types, %d phases" + % (n, len(keywords), len(types), len(phases))) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/docgen/gen.py b/tools/docgen/gen.py index 5fa8f52a..eef8638b 100644 --- a/tools/docgen/gen.py +++ b/tools/docgen/gen.py @@ -106,9 +106,14 @@ def load_sections(): meta["related_list"] = meta.get("related", "").split() entries.append(meta) entries.sort(key=lambda e: (int(e.get("order", 999)), e.get("name", ""))) + # A namespace section is discovered, not hardcoded: it is any section + # whose symbols are `namespace-method`s, named by their `ns:` field. So + # adding a namespace is just adding its docs dir — gen.py needs no edit. + ns_name = next((e["ns"] for e in entries + if e.get("kind") == "namespace-method" and e.get("ns")), None) sections.append({"id": smeta.get("id", cat), "title": smeta.get("title", cat.title()), "order": int(smeta.get("order", 999)), "blurb": sblurb, - "cat": cat, "entries": entries}) + "cat": cat, "entries": entries, "ns_name": ns_name}) sections.sort(key=lambda s: (s["order"], s["title"])) return sections @@ -142,7 +147,10 @@ def build_symbols(sections, palette): elif kind == "annotation": sym["annotations"][tok] = eid if tip: sym["tips"][tok] = tip - # namespaces: Screen/Input/Random/Map from ns methods, plus Color + # namespaces are discovered from the ns methods present, plus Color; each + # namespace's tip falls back to its section blurb so no hardcoded list of + # namespaces is needed here when a new one is added. + ns_blurb = {s["ns_name"]: plain_text(s["blurb"]) for s in sections if s.get("ns_name")} nsnames = set() for tok in sym["nsmethods"]: if "." in tok: nsnames.add(tok.split(".", 1)[0]) @@ -150,13 +158,26 @@ def build_symbols(sections, palette): for nn in sorted(nsnames): sym["namespaces"][nn] = ns_page(nn) sym["cards"][ns_page(nn)] = {"name": nn, "sig": nn + ".*", "kind": "namespace", - "tip": NS_TIP.get(nn, ""), "page": ns_page(nn) + ".html", + "tip": ns_tip(nn, ns_blurb), "page": ns_page(nn) + ".html", "section": "Namespaces"} return sym, items -NS_TIP = {"Screen": "The 2D drawing surface.", "Color": "The named color palette.", - "Input": "Reading the keyboard.", "Random": "The seeded, deterministic RNG.", - "Map": "The character-grid tilemap."} +def plain_text(s, limit=160): + """The first sentence of a blurb, stripped of tags — for use as a one-line tip.""" + t = re.sub(r"<[^>]+>", "", s or "").strip() + m = re.match(r"(.+?[.!?])(\s|$)", t) + if m: t = m.group(1) + return t if len(t) <= limit else t[:limit].rsplit(" ", 1)[0] + "…" + +def ns_tip(nsname, ns_blurb): + """A namespace's tip: an optional curated override, else its section blurb.""" + return NS_TIP.get(nsname) or ns_blurb.get(nsname, "") + +# Optional short overrides for a namespace's one-line tip. A namespace NOT +# listed here falls back to the first sentence of its section blurb (see +# ns_tip), so a newly added namespace needs no edit here. Color has no docs +# section of its own, so its override is required. +NS_TIP = {"Color": "The named color palette."} # --------------------------------------------------------------------------- # shared chrome @@ -238,7 +259,7 @@ def item_page(e, section, cfg, items): """, { "TOPBAR": topbar(cfg), - "SECHREF": "ns-" + section["cat"] + ".html" if section["cat"] in ("screen","input","random","map") else "api.html#" + section["id"], + "SECHREF": ns_page(section["ns_name"]) + ".html" if section.get("ns_name") else "api.html#" + section["id"], "SECTION": esc(section["title"]), "NAME": esc(e.get("name","")), "KIND": e.get("kind","").replace("namespace-method","method"), @@ -270,7 +291,7 @@ def ns_overview_page(nsname, section, cfg): """, {"TOPBAR": topbar(cfg), "NAME": esc(nsname), "BLURB": section["blurb"], "ROWS": rows}) - return head_html(nsname + " — Ludic", NS_TIP.get(nsname,""), "item.css") + "\n\n" + body + return head_html(nsname + " — Ludic", NS_TIP.get(nsname) or plain_text(section["blurb"]), "item.css") + "\n\n" + body def color_page(palette, cfg): groups = "" @@ -416,11 +437,10 @@ def main(): continue for e in s["entries"]: W(e["id"] + ".html", item_page(e, s, cfg, items)); npages += 1 - # namespace overview pages - by_cat = {s["cat"]: s for s in sections} - for nsname, cat in (("Screen","screen"),("Input","input"),("Random","random"),("Map","map")): - if cat in by_cat: - W(ns_page(nsname) + ".html", ns_overview_page(nsname, by_cat[cat], cfg)); npages += 1 + # namespace overview pages — one per discovered namespace section + for s in sections: + if s["ns_name"]: + W(ns_page(s["ns_name"]) + ".html", ns_overview_page(s["ns_name"], s, cfg)); npages += 1 W("ns-color.html", color_page(palette, cfg)); npages += 1 # index + landing + assets W("api.html", api_index(sections, cfg)) diff --git a/tools/docgen/inventory.json b/tools/docgen/inventory.json index 882280e4..c68d12b6 100644 --- a/tools/docgen/inventory.json +++ b/tools/docgen/inventory.json @@ -50,6 +50,20 @@ "fn-file_stdout", "fn-file_stderr" ], + "collide": [ + "collide-rects", + "collide-point_rect", + "collide-circles", + "collide-rect_circle" + ], + "color": [ + "color-rgb", + "color-rgba", + "color-lerp", + "color-darken", + "color-lighten", + "color-with_alpha" + ], "control": [ "kw-if", "kw-while", @@ -60,6 +74,13 @@ "kw-state", "kw-become" ], + "ease": [ + "ease-in", + "ease-out", + "ease-in_out", + "ease-back", + "ease-bounce" + ], "ecs": [ "kw-spawn", "kw-despawn", @@ -95,11 +116,77 @@ "input": [ "input-key" ], + "list": [ + "list-len", + "list-push", + "list-clear", + "list-first", + "list-last", + "list-pop", + "list-swap", + "list-contains", + "list-index_of", + "list-reverse", + "list-insert", + "list-remove_at", + "list-remove", + "list-sort" + ], "map": [ "map-size", "map-row", "map-tile" ], + "math": [ + "math-min", + "math-max", + "math-abs", + "math-clamp", + "math-sign", + "math-floor", + "math-ceil", + "math-round", + "math-lerp", + "math-inverse_lerp", + "math-remap", + "math-sqrt", + "math-sin", + "math-cos", + "math-tan", + "math-hypot", + "math-dist", + "math-dist2", + "math-deg_to_rad", + "math-rad_to_deg", + "math-posmod", + "math-wrap", + "math-ping_pong", + "math-snapped", + "math-move_toward", + "math-smoothstep", + "math-atan2", + "math-asin", + "math-acos" + ], + "mem": [ + "mem-bytes", + "mem-words", + "mem-copy", + "mem-fill", + "mem-peek", + "mem-poke" + ], + "net": [ + "net-send", + "net-poll", + "net-serialize", + "net-apply", + "net-owner", + "net-set_owner", + "net-is_server", + "net-is_owner", + "net-local_id" + ], "networking": [ "fn-net_send", "fn-net_poll", @@ -134,7 +221,14 @@ "random": [ "random-range", "random-chance", - "random-seed" + "random-seed", + "random-value", + "random-int", + "random-sign" + ], + "save": [ + "save-write", + "save-read" ], "scenes": [ "kw-scene", @@ -154,7 +248,14 @@ "screen-show", "screen-width", "screen-height", - "screen-status" + "screen-status", + "screen-line", + "screen-circle", + "screen-fill_circle", + "screen-triangle", + "screen-fill_triangle", + "screen-sprite", + "screen-sprite_scaled" ], "structure": [ "kw-program", @@ -172,6 +273,50 @@ "kw-ui", "kw-enum" ], + "sys": [ + "sys-arg", + "sys-arg_count", + "sys-exit", + "sys-run", + "sys-env", + "sys-read_char", + "sys-file_open", + "sys-file_read", + "sys-file_write", + "sys-file_seek", + "sys-file_tell", + "sys-file_close", + "sys-stdout", + "sys-stderr" + ], + "text": [ + "text-length", + "text-char_at", + "text-slice", + "text-starts_with", + "text-ends_with", + "text-contains", + "text-index_of", + "text-equals", + "text-concat", + "text-to_int", + "text-from_int", + "text-upper", + "text-lower", + "text-trim", + "text-repeat", + "text-pad_left", + "text-pad_right", + "text-split", + "text-join", + "text-replace" + ], + "time": [ + "time-frame", + "time-delta", + "time-elapsed", + "time-now" + ], "types": [ "type-bool", "type-byte", @@ -185,5 +330,23 @@ "type-str", "type-void", "type-words" + ], + "world": [ + "world-get", + "world-set", + "world-has", + "world-count", + "world-size", + "world-spawn", + "world-save", + "world-load", + "world-prop_id", + "world-field_id", + "world-model_id", + "world-kind", + "world-register_prop", + "world-attach", + "world-detach", + "world-query_next" ] } diff --git a/tools/editors/README.md b/tools/editors/README.md index a60f6875..391b1953 100644 --- a/tools/editors/README.md +++ b/tools/editors/README.md @@ -13,8 +13,8 @@ tools/ludic-tools/ the actual language knowledge, in C, no dependenci ludic_index.h error-tolerant reader: declarations, bindings, scopes ludic_workspace.h multi-file model: imports, compilation units, Markdown ludic_json.h just enough JSON for LSP - ludic_fmt_main.c -> build/ludic-fmt - ludic_lsp.c -> build/ludic-lsp + ludic_fmt_main.c -> bin/ludic-fmt + ludic_lsp.c -> bin/ludic-lsp tools/editors/ shared/ TextMate grammar + Markdown injection + language config @@ -26,11 +26,11 @@ tools/editors/ ## Build it ```bash -./tools/build-tools.sh +bin/x tools ``` -Produces `build/ludic-fmt` and `build/ludic-lsp`. Add `--install` to symlink both -into `~/.local/bin`, `--test` to run `tools/test-tools.sh` afterwards. +Produces `bin/ludic-fmt` and `bin/ludic-lsp`. Add `--install` to symlink both +into `~/.local/bin`, `--test` to run `bin/x test-tools` afterwards. ## What you get, in any editor @@ -53,7 +53,7 @@ and otherwise keywords, builtins, and everything in scope. ## Per-editor setup - **VS Code** — [`vscode/`](vscode/). `npm install && npx @vscode/vsce package`, then - install the `.vsix`. Finds the binaries under `build/` on its own. + install the `.vsix`. Finds the binaries under `bin/` on its own. - **JetBrains** — [`jetbrains/`](jetbrains/). `./gradlew buildPlugin`, then install the zip from disk. Uses LSP4IJ rather than the paid-IDE LSP API, so it works in Community editions too. @@ -65,9 +65,9 @@ and otherwise keywords, builtins, and everything in scope. - **Anything else** that speaks LSP: ``` - command: build/ludic-lsp --stdio + command: bin/ludic-lsp --stdio languages: ludic, markdown - initializationOptions: { "compilerPath": "build/ludicc", "compilerDiagnostics": true, "indentSize": 2 } + initializationOptions: { "compilerPath": "bin/ludicc", "compilerDiagnostics": true, "indentSize": 2 } ``` ## Markdown @@ -98,8 +98,8 @@ prose: The formatter handles Markdown too, which keeps documentation honest: ```bash -build/ludic-fmt --check LANGUAGE.md README.md # CI: fail if a fence is unformatted -build/ludic-fmt -w LANGUAGE.md # reformat the fences, leave the prose +bin/ludic-fmt --check LANGUAGE.md README.md # CI: fail if a fence is unformatted +bin/ludic-fmt -w LANGUAGE.md # reformat the fences, leave the prose ``` ## Keeping a tree formatted @@ -109,8 +109,8 @@ ln -sf ../../tools/git-hooks/pre-commit .git/hooks/pre-commit ``` The hook runs `ludic-fmt --check` over the staged `.ludic` and `.md` files only, -and does nothing at all when `build/ludic-fmt` has not been built — so it never -blocks a commit on a machine that has not run `build-tools.sh`. +and does nothing at all when `bin/ludic-fmt` has not been built — so it never +blocks a commit on a machine that has not run `bin/x tools`. ## Why the formatter is not `ludicc --fmt` @@ -132,7 +132,7 @@ both spellings are what the language documents and uses: (`const R_DIR: int = 0 # 0 up`) survive a save; - `id=Root` inside a `ui` block and `{Enemy}` inside a query stay tight. -`tools/test-tools.sh` checks the property that matters: formatting every file in +`bin/x test-tools` checks the property that matters: formatting every file in the tree and re-running the *compiler's* canonical dump produces byte-identical output. The formatter cannot change what a program means. @@ -142,7 +142,7 @@ The vocabulary is written down in five places that cannot include each other — the compiler's two tables, `ludic_syntax.h`, the TextMate grammar (JSON), and the JetBrains lexer (Kotlin). Adding a builtin and forgetting the rest is silent failure, so `tools/check-vocabulary.py` compares all five and -`tools/test-tools.sh` runs it. +`bin/x test-tools` runs it. When you add a keyword or builtin: put it in `ludic_syntax.h`, then run -`./tools/test-tools.sh` and let it tell you which copies still need it. +`bin/x test-tools` and let it tell you which copies still need it. diff --git a/tools/editors/jetbrains/README.md b/tools/editors/jetbrains/README.md index 1b124d3b..28c703bb 100644 --- a/tools/editors/jetbrains/README.md +++ b/tools/editors/jetbrains/README.md @@ -43,7 +43,7 @@ The first build downloads an IntelliJ IDEA Community distribution (over 1 GB), so expect it to take a while; later builds take seconds. Once the cache is warm, ```bash -LUDIC_TEST_JETBRAINS=1 ./tools/test-tools.sh +LUDIC_TEST_JETBRAINS=1 bin/x test-tools ``` includes the plugin build in the toolchain's own test run. @@ -54,5 +54,5 @@ LSP4IJ is a required dependency; the IDE offers to install it for you. ## Settings **Settings -> Languages & Frameworks -> Ludic** — the path to `ludic-lsp` and to -`ludicc`. Both default to `build/` under the project root, which is where -`tools/build-tools.sh` puts them. +`ludicc`. Both default to `bin/` under the project root, which is where +`bin/x tools` puts them. diff --git a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicConfigurable.kt b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicConfigurable.kt index 6632ad0c..1fa44469 100644 --- a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicConfigurable.kt +++ b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicConfigurable.kt @@ -37,11 +37,11 @@ class LudicConfigurable(private val project: Project) : Configurable { panel = FormBuilder.createFormBuilder() .addLabeledComponent(JBLabel("Language server (ludic-lsp):"), serverField, 1, false) .addComponentToRightColumn( - JBLabel("Leave empty to use build/ludic-lsp under the project, then PATH.") + JBLabel("Leave empty to use bin/ludic-lsp under the project, then PATH.") ) .addLabeledComponent(JBLabel("Compiler (ludicc):"), compilerField, 1, false) .addComponentToRightColumn( - JBLabel("Used for authoritative diagnostics. Empty means build/ludicc.") + JBLabel("Used for authoritative diagnostics. Empty means bin/ludicc.") ) .addComponent(diagnostics) .addLabeledComponent(JBLabel("Formatter indent:"), indent, 1, false) diff --git a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicServer.kt b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicServer.kt index 4551ad0f..1f99c8eb 100644 --- a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicServer.kt +++ b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicServer.kt @@ -146,8 +146,8 @@ internal fun serverCommand(root: String?, configured: String): List? { } /** Where the toolchain is looked for, relative to the project root. */ -internal val SERVER_SUBDIRS = listOf("build", "tools/build", "bin", ".") -internal val COMPILER_SUBDIRS = listOf("build", "bin", ".") +internal val SERVER_SUBDIRS = listOf("bin", "build", "tools/build", ".") +internal val COMPILER_SUBDIRS = listOf("bin", "build", ".") class LudicLanguageServerFactory : LanguageServerFactory { override fun createConnectionProvider(project: Project): StreamConnectionProvider = diff --git a/tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml b/tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml index ec25a803..95e31eb1 100644 --- a/tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml +++ b/tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml @@ -15,7 +15,7 @@

  • Highlighting of ```ludic fenced blocks in Markdown.
  • Set the paths under Settings → Languages & Frameworks → Ludic, or leave - them blank to use build/ludic-lsp and build/ludicc under the + them blank to use bin/ludic-lsp and bin/ludicc under the project root.

    ]]> diff --git a/tools/editors/vscode/README.md b/tools/editors/vscode/README.md index 58598f1b..eb427231 100644 --- a/tools/editors/vscode/README.md +++ b/tools/editors/vscode/README.md @@ -23,10 +23,10 @@ for the language reference. Build the toolchain once, from the repository root: ```bash -./tools/build-tools.sh +bin/x tools ``` -That produces `build/ludic-lsp` and `build/ludic-fmt`, which the extension finds +That produces `bin/ludic-lsp` and `bin/ludic-fmt`, which the extension finds on its own. If you keep them elsewhere, set `ludic.server.path`. Format on save: @@ -37,7 +37,7 @@ Format on save: ## Settings -- `ludic.server.path` — where `ludic-lsp` lives. Empty = search `build/`, then `PATH`. +- `ludic.server.path` — where `ludic-lsp` lives. Empty = search `bin/`, then `PATH`. - `ludic.server.enabled` — turn the server off and keep only static highlighting. - `ludic.compilerPath` — where `ludicc` lives, for on-save diagnostics. - `ludic.compilerDiagnostics` — whether to run the compiler at all. diff --git a/tools/editors/vscode/src/extension.js b/tools/editors/vscode/src/extension.js index ab816a7a..b9207771 100644 --- a/tools/editors/vscode/src/extension.js +++ b/tools/editors/vscode/src/extension.js @@ -24,7 +24,7 @@ function resolveServer(folders) { const names = ['ludic-lsp', 'ludic-lsp.exe']; for (const folder of folders) { const root = folder.uri.fsPath; - for (const rel of ['build', 'tools/build', 'bin', '.']) { + for (const rel of ['bin', 'build', 'tools/build', '.']) { for (const name of names) { const p = path.join(root, rel, name); if (isExecutable(p)) return p; @@ -45,8 +45,10 @@ function resolveCompiler(folders) { const configured = vscode.workspace.getConfiguration('ludic').get('compilerPath'); if (configured) return expand(configured); for (const folder of folders) { - const p = path.join(folder.uri.fsPath, 'build', 'ludicc'); - if (isExecutable(p)) return p; + for (const rel of ['bin', 'build']) { + const p = path.join(folder.uri.fsPath, rel, 'ludicc'); + if (isExecutable(p)) return p; + } } return ''; } @@ -74,7 +76,7 @@ async function start(context) { // Not an error worth a modal: the grammar still highlights, and plenty of // people open a .ludic file without having built the toolchain. output.appendLine( - 'ludic-lsp not found. Build it with tools/build-tools.sh, or set "ludic.server.path". ' + + 'ludic-lsp not found. Build it with `bin/x tools`, or set "ludic.server.path". ' + 'Syntax highlighting works without it; completion and diagnostics do not.' ); return; diff --git a/tools/ludic-tools/lsp.ludic b/tools/ludic-tools/lsp.ludic index 05d58b33..aa4ea732 100644 --- a/tools/ludic-tools/lsp.ludic +++ b/tools/ludic-tools/lsp.ludic @@ -1188,6 +1188,203 @@ program LudicLsp { fn badd(name: ptr, sig: ptr) -> void { push(g_builtins, name); push(g_bsigs, sig) } fn is_builtin_name(name: ptr) -> bool { var i = 0; while i < len(g_builtins) { if (g_builtins[i] == name) { return true }; i = i + 1 }; return false } fn builtin_sig(name: ptr) -> ptr { var i = 0; while i < len(g_builtins) { if (g_builtins[i] == name) { return g_bsigs[i] }; i = i + 1 }; return null } + + # The namespaced standard-library surface: `Namespace.method`, mirroring the + # compiler's emit_ns_call (selfhost/emit_expr.ludic). Screen/Random/Input/Map + # methods resolve to the underlying bare builtin's signature; Math/Text/List + # are pure fixed-point / string / slice ops with their own signatures. Returns + # the signature label for signature help, or null if it is not a known method. + fn ns_method_sig(ns: ptr, meth: ptr) -> ptr { + if (ns == "Screen") { + if (meth == "clear") { return builtin_sig("clear") } + if (meth == "fill_rectangle") { return builtin_sig("fill_rect") } + if (meth == "draw_rectangle") { return builtin_sig("frame_rect") } + if (meth == "put_pixel") { return builtin_sig("put_px") } + if (meth == "draw_text") { return builtin_sig("text") } + if (meth == "draw_number") { return builtin_sig("text_int") } + if (meth == "show") { return builtin_sig("present") } + if (meth == "width") { return "Screen.width() -> int" } + if (meth == "height") { return "Screen.height() -> int" } + if (meth == "status") { return builtin_sig("status") } + if (meth == "line") { return "Screen.line(x1, y1, x2, y2, color)" } + if (meth == "circle") { return "Screen.circle(x, y, radius, color)" } + if (meth == "fill_circle") { return "Screen.fill_circle(x, y, radius, color)" } + if (meth == "triangle") { return "Screen.triangle(x1, y1, x2, y2, x3, y3, color)" } + if (meth == "fill_triangle") { return "Screen.fill_triangle(x1, y1, x2, y2, x3, y3, color)" } + if (meth == "sprite") { return "Screen.sprite(id, x, y)" } + if (meth == "sprite_scaled") { return "Screen.sprite_scaled(id, x, y, scale)" } + } + if (ns == "Map") { + if (meth == "size") { return builtin_sig("map_size") } + if (meth == "row") { return builtin_sig("map_row") } + if (meth == "tile") { return builtin_sig("tile") } + } + if (ns == "Random") { + if (meth == "range") { return builtin_sig("rng_range") } + if (meth == "chance") { return builtin_sig("rng_chance") } + if (meth == "seed") { return builtin_sig("seed") } + if (meth == "value") { return "Random.value() -> fixed" } + if (meth == "int") { return "Random.int(max) -> int" } + if (meth == "sign") { return "Random.sign() -> int" } + } + if (ns == "Color") { + if (meth == "rgb") { return "Color.rgb(r, g, b) -> int" } + if (meth == "rgba") { return "Color.rgba(r, g, b, a) -> int" } + if (meth == "lerp") { return "Color.lerp(c0, c1, t) -> int" } + if (meth == "darken") { return "Color.darken(c, amount) -> int" } + if (meth == "lighten") { return "Color.lighten(c, amount) -> int" } + if (meth == "with_alpha") { return "Color.with_alpha(c, a) -> int" } + } + if (ns == "Input") { + if (meth == "key") { return builtin_sig("key") } + } + if (ns == "Math") { + if (meth == "min") { return "Math.min(a, b) -> int" } + if (meth == "max") { return "Math.max(a, b) -> int" } + if (meth == "abs") { return "Math.abs(x) -> int" } + if (meth == "clamp") { return "Math.clamp(v, lo, hi) -> int" } + if (meth == "sign") { return "Math.sign(x) -> int" } + if (meth == "floor") { return "Math.floor(x) -> int" } + if (meth == "ceil") { return "Math.ceil(x) -> int" } + if (meth == "round") { return "Math.round(x) -> int" } + if (meth == "lerp") { return "Math.lerp(a, b, t) -> fixed" } + if (meth == "inverse_lerp") { return "Math.inverse_lerp(a, b, v) -> fixed" } + if (meth == "remap") { return "Math.remap(v, in0, in1, out0, out1) -> fixed" } + if (meth == "sqrt") { return "Math.sqrt(x) -> fixed" } + if (meth == "sin") { return "Math.sin(radians) -> fixed" } + if (meth == "cos") { return "Math.cos(radians) -> fixed" } + if (meth == "tan") { return "Math.tan(radians) -> fixed" } + if (meth == "atan2") { return "Math.atan2(y, x) -> fixed" } + if (meth == "asin") { return "Math.asin(x) -> fixed" } + if (meth == "acos") { return "Math.acos(x) -> fixed" } + if (meth == "hypot") { return "Math.hypot(x, y) -> fixed" } + if (meth == "dist") { return "Math.dist(x0, y0, x1, y1) -> fixed" } + if (meth == "dist2") { return "Math.dist2(x0, y0, x1, y1) -> fixed" } + if (meth == "deg_to_rad") { return "Math.deg_to_rad(degrees) -> fixed" } + if (meth == "rad_to_deg") { return "Math.rad_to_deg(radians) -> fixed" } + if (meth == "posmod") { return "Math.posmod(a, m) -> int" } + if (meth == "wrap") { return "Math.wrap(v, lo, hi) -> int" } + if (meth == "ping_pong") { return "Math.ping_pong(t, len) -> int" } + if (meth == "snapped") { return "Math.snapped(v, step) -> fixed" } + if (meth == "move_toward") { return "Math.move_toward(from, to, delta) -> fixed" } + if (meth == "smoothstep") { return "Math.smoothstep(e0, e1, x) -> fixed" } + } + if (ns == "Text") { + if (meth == "length") { return "Text.length(s) -> int" } + if (meth == "char_at") { return "Text.char_at(s, i) -> int" } + if (meth == "slice") { return "Text.slice(s, a, b) -> str" } + if (meth == "starts_with") { return "Text.starts_with(s, prefix) -> bool" } + if (meth == "ends_with") { return "Text.ends_with(s, suffix) -> bool" } + if (meth == "contains") { return "Text.contains(s, sub) -> bool" } + if (meth == "index_of") { return "Text.index_of(s, sub) -> int" } + if (meth == "equals") { return "Text.equals(a, b) -> bool" } + if (meth == "concat") { return "Text.concat(a, b) -> str" } + if (meth == "to_int") { return "Text.to_int(s) -> int" } + if (meth == "from_int") { return "Text.from_int(n) -> str" } + if (meth == "upper") { return "Text.upper(s) -> str" } + if (meth == "lower") { return "Text.lower(s) -> str" } + if (meth == "trim") { return "Text.trim(s) -> str" } + if (meth == "repeat") { return "Text.repeat(s, n) -> str" } + if (meth == "pad_left") { return "Text.pad_left(s, width) -> str" } + if (meth == "pad_right") { return "Text.pad_right(s, width) -> str" } + if (meth == "split") { return "Text.split(s, sep) -> []str" } + if (meth == "join") { return "Text.join(parts, sep) -> str" } + if (meth == "replace") { return "Text.replace(s, from, to) -> str" } + } + if (ns == "List") { + if (meth == "len") { return "List.len(s) -> int" } + if (meth == "push") { return "List.push(s, v)" } + if (meth == "clear") { return "List.clear(s)" } + if (meth == "first") { return "List.first(s) -> T" } + if (meth == "last") { return "List.last(s) -> T" } + if (meth == "pop") { return "List.pop(s) -> T" } + if (meth == "swap") { return "List.swap(s, i, j)" } + if (meth == "contains") { return "List.contains(s, v) -> bool" } + if (meth == "index_of") { return "List.index_of(s, v) -> int" } + if (meth == "reverse") { return "List.reverse(s)" } + if (meth == "insert") { return "List.insert(s, i, v)" } + if (meth == "remove_at") { return "List.remove_at(s, i)" } + if (meth == "remove") { return "List.remove(s, v)" } + if (meth == "sort") { return "List.sort(s)" } + } + if (ns == "Ease") { + if (meth == "in") { return "Ease.in(t) -> fixed" } + if (meth == "out") { return "Ease.out(t) -> fixed" } + if (meth == "in_out") { return "Ease.in_out(t) -> fixed" } + if (meth == "back") { return "Ease.back(t) -> fixed" } + if (meth == "bounce") { return "Ease.bounce(t) -> fixed" } + } + if (ns == "Collide") { + if (meth == "rects") { return "Collide.rects(ax, ay, aw, ah, bx, by, bw, bh) -> bool" } + if (meth == "point_rect") { return "Collide.point_rect(px, py, rx, ry, rw, rh) -> bool" } + if (meth == "circles") { return "Collide.circles(ax, ay, ar, bx, by, br) -> bool" } + if (meth == "rect_circle") { return "Collide.rect_circle(rx, ry, rw, rh, cx, cy, cr) -> bool" } + } + if (ns == "World") { + if (meth == "get") { return "World.get(prop_id, field_id, entity) -> int" } + if (meth == "set") { return "World.set(prop_id, field_id, entity, value)" } + if (meth == "has") { return "World.has(entity, prop_id) -> int" } + if (meth == "count") { return "World.count() -> int" } + if (meth == "size") { return "World.size() -> int" } + if (meth == "spawn") { return "World.spawn(model_id) -> entity" } + if (meth == "save") { return "World.save(buf) -> int" } + if (meth == "load") { return "World.load(buf, len)" } + if (meth == "prop_id") { return "World.prop_id(name) -> int" } + if (meth == "field_id") { return "World.field_id(prop_id, name) -> int" } + if (meth == "model_id") { return "World.model_id(name) -> int" } + if (meth == "kind") { return "World.kind(entity) -> int" } + if (meth == "register_prop") { return "World.register_prop(name, size) -> int" } + if (meth == "attach") { return "World.attach(entity, prop_id)" } + if (meth == "detach") { return "World.detach(entity, prop_id)" } + if (meth == "query_next") { return "World.query_next(query_id, cursor) -> int" } + } + if (ns == "Net") { + if (meth == "send") { return "Net.send(peer, buf, len)" } + if (meth == "poll") { return "Net.poll(buf, cap) -> int" } + if (meth == "serialize") { return "Net.serialize(entity, buf) -> int" } + if (meth == "apply") { return "Net.apply(entity, buf) -> int" } + if (meth == "owner") { return "Net.owner(entity) -> int" } + if (meth == "set_owner") { return "Net.set_owner(entity, peer)" } + if (meth == "is_server") { return "Net.is_server() -> bool" } + if (meth == "is_owner") { return "Net.is_owner(entity) -> bool" } + if (meth == "local_id") { return "Net.local_id() -> int" } + } + if (ns == "Sys") { + if (meth == "arg") { return "Sys.arg(i) -> str" } + if (meth == "arg_count") { return "Sys.arg_count() -> int" } + if (meth == "exit") { return "Sys.exit(code)" } + if (meth == "run") { return "Sys.run(command) -> int" } + if (meth == "env") { return "Sys.env(name) -> str" } + if (meth == "read_char") { return "Sys.read_char() -> int" } + if (meth == "file_open") { return "Sys.file_open(path, mode) -> ptr" } + if (meth == "file_read") { return "Sys.file_read(file, buf, n) -> int" } + if (meth == "file_write") { return "Sys.file_write(file, buf, n) -> int" } + if (meth == "file_seek") { return "Sys.file_seek(file, offset, whence) -> int" } + if (meth == "file_tell") { return "Sys.file_tell(file) -> int" } + if (meth == "file_close") { return "Sys.file_close(file)" } + if (meth == "stdout") { return "Sys.stdout() -> ptr" } + if (meth == "stderr") { return "Sys.stderr() -> ptr" } + } + if (ns == "Save") { + if (meth == "write") { return "Save.write()" } + if (meth == "read") { return "Save.read() -> bool" } + } + if (ns == "Time") { + if (meth == "frame") { return "Time.frame() -> int" } + if (meth == "delta") { return "Time.delta() -> fixed" } + if (meth == "elapsed") { return "Time.elapsed() -> fixed" } + if (meth == "now") { return "Time.now() -> int" } + } + if (ns == "Mem") { + if (meth == "bytes") { return "Mem.bytes(n) -> ptr" } + if (meth == "words") { return "Mem.words(n) -> words" } + if (meth == "copy") { return "Mem.copy(dst, src, n)" } + if (meth == "fill") { return "Mem.fill(buf, value, n)" } + if (meth == "peek") { return "Mem.peek(buf, i) -> int" } + if (meth == "poke") { return "Mem.poke(buf, i, value)" } + } + return null + } fn init_builtins() -> void { g_builtins = new []ptr; g_bsigs = new []ptr badd("min", "min(a: int, b: int) -> int") @@ -2185,7 +2382,14 @@ program LudicLsp { } if callee < 0 or D.tk_kind[callee] != LT_ID { send_result(id, "null"); return } let name = ttext(D, callee) - var sig = builtin_sig(name) + var sig: ptr = null + # a namespaced call `Namespace.method(` resolves through the ns surface first + let dot = prev_sig(D, callee) + if dot >= 0 and tis(D, dot, ".") { + let nsi = prev_sig(D, dot) + if nsi >= 0 and D.tk_kind[nsi] == LT_ID { sig = ns_method_sig(ttext(D, nsi), name) } + } + if (sig == null) { sig = builtin_sig(name) } var docstr = "" if (sig == null) { let t = find_top(D, name) diff --git a/tools/test-lsp.py b/tools/test-lsp.py index 49b220a9..c8479f41 100755 --- a/tools/test-lsp.py +++ b/tools/test-lsp.py @@ -11,7 +11,8 @@ import subprocess import sys ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -SERVER = os.path.join(ROOT, "build", "ludic-lsp") +# the toolchain binaries live in bin/ (built by `x tools`); LUDIC_LSP overrides. +SERVER = os.environ.get("LUDIC_LSP", os.path.join(ROOT, "bin", "ludic-lsp")) passed = 0 failed = 0 @@ -171,9 +172,10 @@ def main(): "end": {"line": 9999, "character": 0}}}) check_true("inlay hints name query binding types", any(": Stats" == h["label"] for h in hints)) + # a namespaced call resolves to its underlying bare-builtin signature sig = c.request("textDocument/signatureHelp", - {"textDocument": uri, "position": position_of(text, "rng_chance(", 11)}) - check_true("signature help for a builtin", + {"textDocument": uri, "position": position_of(text, "Random.chance(", 14)}) + check_true("signature help for a namespaced builtin", sig and sig["signatures"][0]["label"].startswith("rng_chance(")) toks = c.request("textDocument/semanticTokens/full", {"textDocument": uri}) diff --git a/tools/test-tools.sh b/tools/test-tools.sh deleted file mode 100755 index 407e4cb5..00000000 --- a/tools/test-tools.sh +++ /dev/null @@ -1,198 +0,0 @@ -#!/bin/bash -# test-tools.sh — regression suite for the Ludic editor toolchain. -# -# The two properties that matter most are checked against the real source tree -# rather than toy inputs: -# -# 1. the formatter is a no-op on already-formatted code, and idempotent; -# 2. formatting never changes the program — proved by comparing the -# COMPILER's own canonical AST dump before and after. -# -# Then the language server is driven over real LSP traffic on real files. -set -u -cd "$(dirname "$0")/.." - -FMT=build/ludic-fmt -LSP=build/ludic-lsp -LUDICC=build/ludicc -PASS=0 -FAIL=0 -TMP=$(mktemp -d) -trap 'rm -rf "$TMP"' EXIT - -ok() { PASS=$((PASS+1)); printf ' ok %s\n' "$1"; } -bad() { FAIL=$((FAIL+1)); printf ' FAIL %s\n' "$1"; [ $# -gt 1 ] && printf ' %s\n' "$2"; } -check() { if [ "$2" = "$3" ]; then ok "$1"; else bad "$1" "expected [$3] got [$2]"; fi; } - -[ -x "$FMT" ] || { echo "build/ludic-fmt missing — run ./tools/build-tools.sh"; exit 2; } -[ -x "$LSP" ] || { echo "build/ludic-lsp missing — run ./tools/build-tools.sh"; exit 2; } - -SOURCES=$(find examples runtime -name '*.ludic' | sort) - -echo "formatter" - -# --- idempotence: formatting twice equals formatting once ------------------- -for f in $SOURCES; do - "$FMT" "$f" > "$TMP/a" 2>/dev/null - "$FMT" "$TMP/a" > "$TMP/b" 2>/dev/null - if ! cmp -s "$TMP/a" "$TMP/b"; then bad "idempotent: $f"; fi -done -[ $FAIL -eq 0 ] && ok "idempotent on $(echo "$SOURCES" | wc -l | tr -d ' ') files" - -# --- meaning preserved: reformatting a formatted file must be a no-op -------- -# (The compiler is now written in Ludic and has no --fmt AST-dump mode, so the -# formatter is validated by its own idempotence rather than against ludicc.) -MISMATCH="" -for f in examples/hello.ludic examples/snake.ludic examples/menu.ludic \ - examples/qdecl.ludic examples/scenes.ludic; do - [ -f "$f" ] || continue - "$FMT" "$f" > "$TMP/f1.ludic" - "$FMT" "$TMP/f1.ludic" > "$TMP/f2.ludic" - cmp -s "$TMP/f1.ludic" "$TMP/f2.ludic" || MISMATCH="$MISMATCH $f" -done -if [ -z "$MISMATCH" ]; then ok "formatting is idempotent (fmt(fmt(x)) == fmt(x))" -else bad "formatting is not idempotent" "$MISMATCH"; fi - -# --- the strongest invariant: only whitespace ever changes ----------------- -# Every token is re-emitted in order, so stripping whitespace from the input and -# from the output must give identical bytes. This is what makes the formatter -# safe to run on save: it cannot lose, reorder or corrupt anything. -DRIFT="" -for f in $SOURCES README.md LANGUAGE.md COMPILING.md; do - [ -f "$f" ] || continue - "$FMT" "$f" > "$TMP/f" 2>/dev/null - a=$(tr -d ' \t\n' < "$f" | shasum | cut -d' ' -f1) - b=$(tr -d ' \t\n' < "$TMP/f" | shasum | cut -d' ' -f1) - [ "$a" = "$b" ] || DRIFT="$DRIFT $f" -done -if [ -z "$DRIFT" ]; then ok "only whitespace changes (byte-identical modulo spacing)" -else bad "formatter altered non-whitespace bytes" "$DRIFT"; fi - -# --- multi-byte characters must survive intact ------------------------------ -# A UTF-8 character outside a string is an error to the compiler, but the -# formatter must still not split it: doing so silently corrupts the file. -printf 'program E {\n # \xe2\x80\xa6 ellipsis in a comment\n const S: str = "caf\xc3\xa9 \xe2\x86\x92 na\xc3\xafve"\n}\n' > "$TMP/utf8.ludic" -"$FMT" "$TMP/utf8.ludic" > "$TMP/utf8.out" -if cmp -s "$TMP/utf8.ludic" "$TMP/utf8.out"; then ok "UTF-8 preserved byte for byte" -else bad "UTF-8 mangled" "$(diff "$TMP/utf8.ludic" "$TMP/utf8.out" | head -2)"; fi -# the same character where the compiler cannot make sense of it at all: it must -# still come out as one character, not as three spaced-out replacement bytes -printf 'program F {\nfn f() -> int { return \xe2\x80\xa6 }\n}\n' > "$TMP/utf8b.ludic" -a=$(tr -d ' \t\n' < "$TMP/utf8b.ludic" | shasum | cut -d' ' -f1) -b=$("$FMT" "$TMP/utf8b.ludic" | tr -d ' \t\n' | shasum | cut -d' ' -f1) -check "unrecognised characters pass through whole" "$b" "$a" - -# --- comments survive, which is the whole reason this is not ludicc --fmt --- -printf 'program C {\n # keep me\n property P { x: int = 0 } # and me\n}\n' > "$TMP/c.ludic" -N=$("$FMT" "$TMP/c.ludic" | grep -c '#') -check "comments preserved" "$N" "2" - -# --- messy input is normalised ---------------------------------------------- -printf 'program M{\nproperty P{x:int=0}\nhandler S phase Update{let a=1+2\nif a== -1 {a=-a}}\n}\n' > "$TMP/m.ludic" -"$FMT" "$TMP/m.ludic" > "$TMP/m.out" -grep -q '^ property P { x: int = 0 }$' "$TMP/m.out" && ok "reindents and respaces" || bad "reindents and respaces" -grep -q 'a = -a' "$TMP/m.out" && ok "unary minus not spaced" || bad "unary minus not spaced" - -# --- language conventions are respected, not overwritten -------------------- -printf 'program U {\n ui M {\n panel id=Root w=10 {\n button id=Go text="go"\n }\n }\n}\n' > "$TMP/u.ludic" -"$FMT" "$TMP/u.ludic" | grep -q 'id=Root' && ok "widget props stay tight (id=Root)" || bad "widget props stay tight" -printf 'program Q {\n handler S phase Update {\n for (p) in query [Pos, {Foe}] { }\n }\n property Pos { x: int = 0 }\n property Foe { }\n}\n' > "$TMP/q.ludic" -"$FMT" "$TMP/q.ludic" | grep -q '\[Pos, {Foe}\]' && ok "query tags stay tight ({Foe})" || bad "query tags stay tight" -printf 'program A {\n const R_A: int = 0 # one\n const R_BBB: int = 1 # two\n}\n' > "$TMP/a.ludic" -"$FMT" "$TMP/a.ludic" | grep -q 'R_A: int = 0 # one' && ok "hand alignment preserved" || bad "hand alignment preserved" - -# --- --check exit status, for CI and pre-commit hooks ----------------------- -"$FMT" --check -q "$TMP/m.ludic" >/dev/null 2>&1 -check "--check exits 1 on unformatted input" "$?" "1" -"$FMT" -w "$TMP/m.ludic" >/dev/null 2>&1 -"$FMT" --check -q "$TMP/m.ludic" >/dev/null 2>&1 -check "--check exits 0 after -w" "$?" "0" - -# --- markdown: fences formatted, prose untouched ---------------------------- -printf '# T\n\nprose with spaces\n\n```ludic\nprogram D{property P{x:int=0}}\n```\n\n```python\nz = 1\n```\n' > "$TMP/d.md" -"$FMT" "$TMP/d.md" > "$TMP/d.out" -grep -q 'prose with spaces' "$TMP/d.out" && ok "markdown prose untouched" || bad "markdown prose untouched" -grep -q 'z = 1' "$TMP/d.out" && ok "non-ludic fences untouched" || bad "non-ludic fences untouched" -grep -q 'program D { property P { x: int = 0 } }' "$TMP/d.out" && ok "ludic fences formatted" || bad "ludic fences formatted" - -echo "language server" -python3 tools/test-lsp.py -LSPRC=$? -if [ $LSPRC -eq 0 ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); fi - -echo -echo "editor assets" -for f in tools/editors/shared/ludic.tmLanguage.json \ - tools/editors/shared/ludic.markdown-injection.json \ - tools/editors/shared/language-configuration.json \ - tools/editors/vscode/package.json \ - tools/editors/vscode/snippets/ludic.json; do - if python3 -c "import json,sys;json.load(open(sys.argv[1]))" "$f" 2>/dev/null; then ok "valid JSON: $(basename "$f")" - else bad "invalid JSON: $f"; fi -done -for f in tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml \ - tools/editors/jetbrains/src/main/resources/META-INF/ludic-markdown.xml; do - if python3 -c "import xml.dom.minidom,sys;xml.dom.minidom.parse(sys.argv[1])" "$f" 2>/dev/null; then ok "valid XML: $(basename "$f")" - else bad "invalid XML: $f"; fi -done -if command -v node >/dev/null 2>&1; then - node --check tools/editors/vscode/src/extension.js 2>/dev/null && ok "extension.js parses" || bad "extension.js parses" - # A TextMate grammar is unvalidated JSON full of regexes; run it through the - # engine VS Code actually uses rather than assuming it still works. - echo "textmate grammar" - node tools/test-grammar.js - if [ $? -eq 0 ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); fi -else - echo " skip extension.js and grammar tests (node not installed)" -fi - -# VS Code carries its own copy of the shared grammar because an extension must -# be self-contained. build-tools.sh refreshes it; this catches an edit made to -# the copy instead of the original. -SYNCED=1 -for f in ludic.tmLanguage.json ludic.markdown-injection.json; do - cmp -s "tools/editors/shared/$f" "tools/editors/vscode/syntaxes/$f" || SYNCED=0 -done -cmp -s tools/editors/shared/language-configuration.json tools/editors/vscode/language-configuration.json || SYNCED=0 -if [ $SYNCED -eq 1 ]; then ok "vscode grammar copies match tools/editors/shared" -else bad "vscode grammar copies have drifted" "run ./tools/build-tools.sh to resync"; fi - -# The JetBrains plugin is off by default: the first build downloads over a -# gigabyte of IntelliJ SDK, which does not belong in a test run. Once the Gradle -# cache is warm it takes seconds, so it is one env var away. -# LUDIC_TEST_JETBRAINS=1 ./tools/test-tools.sh -if [ "${LUDIC_TEST_JETBRAINS:-0}" = "1" ]; then - JB=tools/editors/jetbrains - if [ -x "$JB/gradlew" ]; then - ( cd "$JB" && ./gradlew buildPlugin verifyPluginStructure --console=plain -q ) >/dev/null 2>&1 \ - && [ -f "$JB/build/distributions/Ludic-1.0.0.zip" ] \ - && ok "jetbrains plugin builds and verifies" \ - || bad "jetbrains plugin build" "cd $JB && ./gradlew buildPlugin (needs JDK 17-21)" - # the lexer/highlighter/PSI tests run headless in a real platform fixture - ( cd "$JB" && ./gradlew test --console=plain -q ) >/dev/null 2>&1 \ - && ok "jetbrains platform tests (lexer, file type, PSI, folding)" \ - || bad "jetbrains platform tests" "cd $JB && ./gradlew test" - # the Plugin Verifier is what catches API breakage against a real IDE build. - # -q swallows its console output, so read the verdict it writes to disk. - ( cd "$JB" && ./gradlew verifyPlugin --console=plain -q ) >/dev/null 2>&1 - VERDICT=$(cat "$JB"/build/reports/pluginVerifier/*/plugins/*/*/verification-verdict.txt 2>/dev/null | head -1) - case "$VERDICT" in - Compatible) ok "plugin verified Compatible against the target IDE" ;; - Compatible*) bad "plugin verification: $VERDICT" "cd $JB && ./gradlew verifyPlugin" ;; - *) bad "plugin verification: ${VERDICT:-no verdict}" "cd $JB && ./gradlew verifyPlugin" ;; - esac - else - echo " skip jetbrains plugin (no gradle wrapper)" - fi -else - echo " skip jetbrains plugin build (set LUDIC_TEST_JETBRAINS=1)" -fi - -# The vocabulary lives in one place; drift between it and the copies that cannot -# include it (the TextMate grammar, the Kotlin lexer) is the failure mode this -# whole layout is meant to prevent, so it is checked rather than trusted. -python3 tools/check-vocabulary.py && ok "vocabulary in sync across grammar/lexer/header" || bad "vocabulary drifted" - -echo -echo "$PASS passed, $FAIL failed" -[ $FAIL -eq 0 ] diff --git a/tools/x/build.ludic b/tools/x/build.ludic new file mode 100644 index 00000000..46d10416 --- /dev/null +++ b/tools/x/build.ludic @@ -0,0 +1,83 @@ +# build.ludic — building the toolchain binaries and user programs. +# +# Replaces build-cli.sh (the ludicc/ludic front-end) and build.sh (compiling a +# Ludic program to a native app). All toolchain binaries land in bin/. + +# compile a Ludic source to a native binary in bin/ via ludicc + clang (-O2). +# Returns true on success. Used for x itself and the editor tools. +fn build_tool(name: ptr, src: ptr) -> bool { + let ll = `build/{name}.ll` + if not shq(`bin/ludicc {src} --emit-llvm -o {ll} 2>/dev/null`) { print(`build failed: {name} (compile)`); return false } + # write to a temp then move, so a running bin/x can rebuild itself in place + if not shq(`{cc()} -O2 {ll} -o bin/{name}.tmp`) { print(`build failed: {name} (link)`); return false } + run(`mv -f bin/{name}.tmp bin/{name} && rm -f {ll}`) + return true +} + +# ---- build-cli: the self-hosted front-end binaries --------------------------- +# Both ludicc and ludic are the SAME multi-call binary assembled from the IR seed +# with clang alone; invoked as `ludic` it compiles-and-runs, as `ludicc` it just +# compiles. +fn cmd_build_cli() -> int { + run("mkdir -p bin build") + print("cc: selfhost/ludicc.seed.ll -> bin/ludicc, bin/ludic (from the IR seed, no C compiler)") + if not shq(`{cc()} selfhost/ludicc.seed.ll -o bin/ludicc`) { err("x: seed did not assemble\n"); return 1 } + run("cp bin/ludicc bin/ludic && chmod +x bin/ludicc bin/ludic") + print("done. built bin/ludicc and bin/ludic") + return 0 +} + +# ---- build: the whole toolchain (ludicc, ludic, x, ludic-fmt, ludic-lsp) ----- +fn cmd_build() -> int { + if cmd_build_cli() != 0 { return 1 } + print("ludicc: tools/x/main.ludic -> bin/x (the task runner rebuilds itself)") + if not build_tool("x", "tools/x/main.ludic") { return 1 } + print("ludicc: tools/ludic-tools/fmt.ludic -> bin/ludic-fmt") + if not build_tool("ludic-fmt", "tools/ludic-tools/fmt.ludic") { return 1 } + print("ludicc: tools/ludic-tools/lsp.ludic -> bin/ludic-lsp") + if not build_tool("ludic-lsp", "tools/ludic-tools/lsp.ludic") { return 1 } + sync_vscode_grammar() + print("done. toolchain in bin/ (ludicc, ludic, x, ludic-fmt, ludic-lsp)") + return 0 +} + +# ---- app: compile a Ludic program to a native app ---------------------------- +# usage: x app [--headless|--windowed] [--save-temps] +# windowed is the default for a game; headless renders the last frame to out.ppm. +fn cmd_app() -> int { + ensure_ludicc() + var src = null + var mode = 1 # 1 = windowed, 2 = headless + var save = false + var ai = 2 + while ai < arg_count() { + let a = arg(ai) + if (a == "--headless") { mode = 2 } + else if (a == "--windowed") { mode = 1 } + else if (a == "--save-temps") { save = true } + else if (a[0] != 45) { src = a } # 45 = '-', so skip other flags + ai = ai + 1 + } + if (src == null) { err("usage: x app [--headless] [--save-temps]\n"); return 1 } + let name = capture_line(`basename {src} .ludic`) + + if (mode == 2) { + let outbin = `build/{name}_headless` + let ll = `{outbin}.ll` + print(`ludicc: {src} -> {outbin} (renders the last frame to out.ppm)`) + if not shq(`bin/ludicc --headless {src} > {ll}`) { return 1 } + if not shq(`{cc()} -O2 {ll} -o {outbin}`) { return 1 } + if not save { run(`rm -f {ll}`) } + print(`done. run: printf 'ddss' | ./{outbin} && open out.ppm`) + return 0 + } + + let outbin = `build/{name}` + let ll = `{outbin}.ll` + print(`ludicc: {src} -> {outbin} (Ludic-written compiler -> LLVM IR -> windowed binary)`) + if not shq(`bin/ludicc --windowed {src} > {ll}`) { return 1 } + if not shq(`{cc()} -O2 {ll} runtime/native/cocoa.ll -framework Cocoa -Wl,-rpath,@loader_path -o {outbin}`) { return 1 } + if not save { run(`rm -f {ll}`) } + print(`done. run: ./{outbin} (from the repo root, so assets/ resolves)`) + return 0 +} diff --git a/tools/x/main.ludic b/tools/x/main.ludic new file mode 100644 index 00000000..7cb72321 --- /dev/null +++ b/tools/x/main.ludic @@ -0,0 +1,80 @@ +# x — the Ludic task runner. One native binary (bin/x) that replaces every +# build/test/bootstrap shell script in the repo. It is written in Ludic and +# compiled by Ludic; the unix tools and clang it drives are invoked through the +# `run` intrinsic, the same way the old *.sh files shelled out. +# +# Bootstrap it once from a clean checkout (the only step Ludic cannot do for +# itself, since compiling Ludic needs a compiler): +# +# clang selfhost/ludicc.seed.ll -o bin/ludicc && bin/ludicc tools/x/main.ludic -o bin/x +# +# Thereafter `bin/x build` rebuilds the whole toolchain — including bin/x itself. +# Always run x from the repository root. +program X { + import "prelude.ludic" + import "selfhost.ludic" + import "build.ludic" + import "tools.ludic" + import "selfhost_test.ludic" + import "test.ludic" + + fn usage() -> void { + print("x — the Ludic task runner (run from the repository root)") + print("") + print("build & run:") + print(" x build build the whole toolchain into bin/ (ludicc, ludic, x, ludic-fmt, ludic-lsp)") + print(" x build-cli build just bin/ludicc and bin/ludic from the IR seed") + print(" x app [--headless] [--save-temps]") + print(" compile a Ludic program to a native app in build/") + print(" x tools [--install] [--test] build the editor toolchain (ludic-fmt, ludic-lsp)") + print("") + print("test:") + print(" x test the full regression suite") + print(" x selfhost-test the self-hosting suite (correctness + bootstrap fixpoints)") + print(" x test-tools the editor-toolchain suite") + print("") + print("self-host internals:") + print(" x selfhost-build [ludicc] [out] assemble + compile the self-host compiler") + print(" x bootstrap the self-hosting fixpoint proof (seeded from bin/ludicc)") + print(" x bootstrap-cfree rebuild the compiler from the seed with no C compiler") + print(" x reseed regenerate selfhost/ludicc.seed.ll after a compiler change") + print(" x game-build compile a Ludic game (headless)") + print(" x sh-compile compile + link one .ludic file") + } + + # a positional argument, or a default when absent + fn argn(i: int, dflt: ptr) -> ptr { + if (i < arg_count()) { return arg(i) } + return dflt + } + + entry { + if (arg_count() < 2) { usage(); exit(1) } + let cmd = arg(1) + + if (cmd == "build") { exit(cmd_build()) } + if (cmd == "build-cli") { exit(cmd_build_cli()) } + if (cmd == "app") { exit(cmd_app()) } + if (cmd == "tools") { exit(cmd_tools()) } + if (cmd == "test") { exit(cmd_test()) } + if (cmd == "selfhost-test") { exit(cmd_selfhost_test()) } + if (cmd == "test-tools") { exit(cmd_test_tools()) } + if (cmd == "bootstrap") { exit(cmd_bootstrap()) } + if (cmd == "bootstrap-cfree") { exit(cmd_bootstrap_cfree()) } + if (cmd == "reseed") { exit(cmd_reseed()) } + if (cmd == "selfhost-build") { exit(cmd_selfhost_build(argn(2, "bin/ludicc"), argn(3, "build/selfhost"))) } + if (cmd == "sh-compile") { + if (arg_count() < 5) { err("usage: x sh-compile \n"); exit(1) } + exit(cmd_sh_compile(arg(2), arg(3), arg(4))) + } + if (cmd == "game-build") { + if (arg_count() < 5) { err("usage: x game-build \n"); exit(1) } + exit(cmd_game_build(arg(2), arg(3), arg(4))) + } + if (cmd == "help") or (cmd == "--help") or (cmd == "-h") { usage(); exit(0) } + + err(`x: unknown command '{cmd}'\n`) + usage() + exit(1) + } +} diff --git a/tools/x/prelude.ludic b/tools/x/prelude.ludic new file mode 100644 index 00000000..5bdedd5f --- /dev/null +++ b/tools/x/prelude.ludic @@ -0,0 +1,119 @@ +# prelude.ludic — the shared runtime for `x`, the Ludic task runner. +# +# `x` replaces every build/test/bootstrap shell script in the repo: it is a +# single native binary (bin/x) that drives clang, the self-host compiler and the +# unix tools the same way the old *.sh files did — only now it is written in +# Ludic and compiled by Ludic. This fragment is the tiny standard library the +# commands lean on: process control, file IO, string trimming and a colored +# PASS/FAIL test harness. It carries no ECS, so it links as a plain CLI program. +# +# Everything runs relative to the current directory, so `x` must be invoked from +# the repository root (the one-line bootstrap in README.md does exactly that). + +# ---- file IO ---------------------------------------------------------------- + +# read a whole file into a fresh NUL-terminated buffer (null if it cannot open) +fn read_file(path: ptr) -> ptr { + let f = file_open(path, "rb") + if (f == null) { return null } + file_seek(f, 0, 2) + let n = file_tell(f) + file_seek(f, 0, 0) + let buf = bytes(n + 1) + file_read(f, buf, n) + buf[n] = 0 + file_close(f) + return buf +} + +# overwrite `path` with `s`; returns false if it could not be opened +fn write_file(path: ptr, s: ptr) -> bool { + let f = file_open(path, "wb") + if (f == null) { return false } + file_write(f, s, len(s)) + file_close(f) + return true +} + +fn file_exists(path: ptr) -> bool { return shq(`test -e {path}`) } +fn is_exec(path: ptr) -> bool { return shq(`test -x {path}`) } +# is `a` newer than `b` (like the shell's `-nt`)? +fn newer(a: ptr, b: ptr) -> bool { return shq(`test {a} -nt {b}`) } + +# ---- process control -------------------------------------------------------- + +# `run` returns the raw wait status; the program's exit code is the high byte. +fn exit_code(st: int) -> int { return (st >> 8) & 255 } +# run a command, returning its exit code (0 = success) +fn sh(cmd: ptr) -> int { return exit_code(run(cmd)) } +# run a command, true when it succeeded +fn shq(cmd: ptr) -> bool { return exit_code(run(cmd)) == 0 } + +# run `cmd` and return its stdout (stderr discarded). Never null. +fn capture(cmd: ptr) -> ptr { + let tmp = "/tmp/x_capture.out" + run(`{cmd} > {tmp} 2>/dev/null`) + let s = read_file(tmp) + if (s == null) { return "" } + return s +} + +# run `cmd`, join its output lines with single spaces and trim — the Ludic twin +# of the shell idiom `$(cmd | tr '\n' ' ' | sed 's/ *$//')`. +fn capture_line(cmd: ptr) -> ptr { + return capture(`{cmd} | tr '\n' ' ' | sed 's/ *$//'`) +} + +# the last line of a command's output (for one-line error messages) +fn capture_tail(cmd: ptr) -> ptr { + return capture(`{cmd} 2>&1 | tail -1`) +} + +fn getenv_or(name: ptr, dflt: ptr) -> ptr { + let v = getenv(name) + if (v == null) { return dflt } + return v +} + +# ---- stdout helpers --------------------------------------------------------- + +# write `s` with no trailing newline (print() always adds one) +fn out(s: ptr) -> void { file_write(file_stdout(), s, len(s)) } +fn err(s: ptr) -> void { file_write(file_stderr(), s, len(s)) } + +# an ESC byte — the lexer has no \033, so build it by hand +fn esc() -> ptr { let b = bytes(2); b[0] = 27; b[1] = 0; return b } +fn c_green() -> ptr { return esc() + "[32m" } +fn c_red() -> ptr { return esc() + "[31m" } +fn c_reset() -> ptr { return esc() + "[0m" } + +# ---- the PASS/FAIL test harness --------------------------------------------- + +var PASS: int = 0 +var FAIL: int = 0 + +fn ok(msg: ptr) -> void { + PASS = PASS + 1 + print(` {c_green()}PASS{c_reset()} {msg}`) +} +fn bad(msg: ptr) -> void { + FAIL = FAIL + 1 + print(` {c_red()}FAIL{c_reset()} {msg}`) +} +fn bad2(msg: ptr, detail: ptr) -> void { + bad(msg) + print(` {detail}`) +} +# assert two strings equal, reporting the mismatch +fn check(label: ptr, got: ptr, want: ptr) -> void { + if (got == want) { ok(label) } + else { bad2(label, `expected [{want}] got [{got}]`) } +} + +# print the "== N passed, M failed ==" footer and return the process exit code +fn report() -> int { + print("") + print(`== {str(PASS)} passed, {str(FAIL)} failed ==`) + if (FAIL == 0) { return 0 } + return 1 +} diff --git a/tools/x/selfhost.ludic b/tools/x/selfhost.ludic new file mode 100644 index 00000000..8aec5c36 --- /dev/null +++ b/tools/x/selfhost.ludic @@ -0,0 +1,201 @@ +# selfhost.ludic — building and bootstrapping the self-host compiler. +# +# Replaces selfhost/build.sh, selfhost/bootstrap.sh, selfhost/bootstrap-cfree.sh, +# selfhost/reseed.sh, selfhost/compile.sh and selfhost/game-build.sh. The one +# canonical fragment list — copied by hand into three of those scripts before — +# now lives here once, in selfhost_frags(). + +# the C toolchain driver (clang) that assembles and links the emitted IR +fn cc() -> ptr { return getenv_or("LUDIC_CC", "clang") } + +# the self-host compiler's source fragments, in link order. This is THE list; +# the old scripts each carried their own copy. +fn selfhost_frags() -> []ptr { + let f = new []ptr + push(f, "selfhost/str.ludic") + push(f, "selfhost/buf.ludic") + push(f, "selfhost/io.ludic") + push(f, "selfhost/ast.ludic") + push(f, "selfhost/lex.ludic") + push(f, "selfhost/parse.ludic") + push(f, "selfhost/parse_game.ludic") + push(f, "selfhost/emit_core.ludic") + push(f, "selfhost/emit_head.ludic") + push(f, "selfhost/emit_addr.ludic") + push(f, "selfhost/emit_intrin.ludic") + push(f, "selfhost/emit_intrin2.ludic") + push(f, "selfhost/emit_math.ludic") + push(f, "selfhost/emit_text.ludic") + push(f, "selfhost/emit_list.ludic") + push(f, "selfhost/emit_ease.ludic") + push(f, "selfhost/emit_collide.ludic") + push(f, "selfhost/emit_mem.ludic") + push(f, "selfhost/emit_time.ludic") + push(f, "selfhost/emit_colorfn.ludic") + push(f, "selfhost/emit_color.ludic") + push(f, "selfhost/emit_new.ludic") + push(f, "selfhost/emit_expr.ludic") + push(f, "selfhost/emit_stmt.ludic") + push(f, "selfhost/emit_ecs.ludic") + push(f, "selfhost/emit_query.ludic") + push(f, "selfhost/emit_spawn.ludic") + push(f, "selfhost/emit_game.ludic") + push(f, "selfhost/emit_machine.ludic") + push(f, "selfhost/emit_save.ludic") + push(f, "selfhost/emit_net.ludic") + push(f, "selfhost/emit_ui.ludic") + push(f, "selfhost/emit_decl.ludic") + push(f, "selfhost/main.ludic") + return f +} + +# concatenate the fragments into `program SelfHost { ... }` at `outpath`. +# This is the pure-Ludic equivalent of the scripts' `{ echo; for; cat; }` block. +fn write_selfhost_src(outpath: ptr) -> bool { + let f = file_open(outpath, "wb") + if (f == null) { return false } + let hdr = "program SelfHost {\n" + file_write(f, hdr, len(hdr)) + let frags = selfhost_frags() + var i = 0 + while i < len(frags) { + let s = read_file(frags[i]) + if (s != null) { file_write(f, s, len(s)) } + file_write(f, "\n", 1) + i = i + 1 + } + let ftr = "}\n" + file_write(f, ftr, len(ftr)) + file_close(f) + return true +} + +# count the lines in a file (for the progress notes the scripts printed) +fn line_count(path: ptr) -> ptr { + return capture_line(`wc -l < {path}`) +} + +# ensure bin/ludicc exists and is current with the seed. Built from the checked-in +# IR seed with clang alone — no C compiler is ever involved. +fn ensure_ludicc() -> void { + run("mkdir -p bin build") + if (not is_exec("bin/ludicc")) or newer("selfhost/ludicc.seed.ll", "bin/ludicc") { + print("cc: selfhost/ludicc.seed.ll -> bin/ludicc (from the IR seed, no C compiler)") + if not shq(`{cc()} selfhost/ludicc.seed.ll -o bin/ludicc`) { + err("x: could not assemble the seed\n"); exit(1) + } + } +} + +# ---- selfhost-build: assemble + compile the self-host compiler --------------- +# usage: x selfhost-build [ludicc] [outbin] (defaults: bin/ludicc, build/selfhost) +fn cmd_selfhost_build(lc: ptr, outbin: ptr) -> int { + run("mkdir -p build") + let src = "build/selfhost.ludic" + if not write_selfhost_src(src) { err("x: cannot write build/selfhost.ludic\n"); return 1 } + let ll = `{outbin}.ll` + if not shq(`{lc} {src} > {ll} 2>/dev/null`) { run(`rm -f {ll}`); return 1 } + let rc = shq(`{cc()} {ll} -o {outbin} 2>/dev/null`) + run(`rm -f {ll}`) + if rc { return 0 } + return 1 +} + +# ---- sh-compile: compile one .ludic with a given selfhost binary and link ---- +# usage: x sh-compile +fn cmd_sh_compile(shbin: ptr, in: ptr, outbin: ptr) -> int { + if not shq(`{shbin} {in} > {outbin}.ll`) { return 1 } + if not shq(`{cc()} {outbin}.ll -o {outbin}`) { return 1 } + return 0 +} + +# ---- game-build: compile a Ludic GAME with the self-host compiler ------------ +# The compiler resolves the game's imports and auto-splices the runtime; -O2 +# strips the dead windowing branches so a headless link needs no win_* defs. + +# the quiet core, reused by the test suites; returns true on success. On failure +# the self-host/link diagnostics are left in /tmp/x_gb.err. +fn game_build_ok(shbin: ptr, game: ptr, outbin: ptr) -> bool { + let ll = `{outbin}.ll` + if not shq(`{shbin} {game} > {ll} 2>/tmp/x_gb.err`) { return false } + if not shq(`{cc()} -O2 {ll} -o {outbin} 2>/tmp/x_gb.err`) { return false } + run(`rm -f {ll}`) + return true +} + +# usage: x game-build +fn cmd_game_build(shbin: ptr, game: ptr, outbin: ptr) -> int { + if game_build_ok(shbin, game, outbin) { print(`built {outbin}`); return 0 } + print("build failed:") + out(capture("grep -i error /tmp/x_gb.err | head -5")) + return 1 +} + +# ---- bootstrap: the self-hosting fixpoint proof (seeded from bin/ludicc) ------ +# stage0 bin/ludicc compiles the self-host source -> gen1 (built by a different +# compiler, so its IR legitimately differs); gen1 -> gen2, gen2 -> gen3, and +# gen2.ll == gen3.ll is the fixpoint that proves the compiler reproduces itself. +fn cmd_bootstrap() -> int { + ensure_ludicc() + run("mkdir -p build/boot") + if cmd_selfhost_build("bin/ludicc", "build/boot/gen1") != 0 { print("FAIL: stage0 build"); return 1 } + print(" stage0: bin/ludicc -> gen1 (self-host compiler)") + + if not shq("build/boot/gen1 build/selfhost.ludic > build/boot/gen2.ll 2>/dev/null") { print("FAIL: gen1 self-compile"); return 1 } + if not shq(`{cc()} build/boot/gen2.ll -o build/boot/gen2 2>/dev/null`) { print("FAIL: gen2 assemble"); return 1 } + print(` stage1: gen1 -> gen2.ll ({line_count("build/boot/gen2.ll")} lines) -> gen2`) + + if not shq("build/boot/gen2 build/selfhost.ludic > build/boot/gen3.ll 2>/dev/null") { print("FAIL: gen2 self-compile"); return 1 } + print(` stage2: gen2 -> gen3.ll ({line_count("build/boot/gen3.ll")} lines)`) + + if shq("cmp -s build/boot/gen2.ll build/boot/gen3.ll") { + run("rm -f build/selfhost.ludic") + print(" FIXPOINT: gen2.ll == gen3.ll — the self-hosted compiler reproduces itself") + return 0 + } + print(" gen2.ll != gen3.ll") + out(capture("diff build/boot/gen2.ll build/boot/gen3.ll | head")) + return 1 +} + +# ---- bootstrap-cfree: rebuild the compiler with NO C compiler ----------------- +# The seed is the compiler's own IR, a proven fixed point: clang assembles it, +# the seed-built compiler compiles its own source, and the result must equal the +# seed byte for byte. +fn cmd_bootstrap_cfree() -> int { + run("mkdir -p build/cfree") + if not shq(`{cc()} selfhost/ludicc.seed.ll -o build/cfree/sh_seed 2>/dev/null`) { print("FAIL: assemble seed"); return 1 } + print(" seed.ll --clang--> sh_seed (no C compiler used)") + if not write_selfhost_src("build/cfree/selfhost.ludic") { print("FAIL: write source"); return 1 } + if not shq("build/cfree/sh_seed build/cfree/selfhost.ludic > build/cfree/out.ll 2>/dev/null") { print("FAIL: seed compiler self-compile"); return 1 } + print(` sh_seed compiles selfhost.ludic -> out.ll ({line_count("build/cfree/out.ll")} lines)`) + if shq("cmp -s build/cfree/out.ll selfhost/ludicc.seed.ll") { + print(" out.ll == seed.ll — the compiler rebuilds itself with no C compiler") + return 0 + } + print(" out.ll != seed.ll (seed is stale — regenerate with: x reseed)") + out(capture("diff build/cfree/out.ll selfhost/ludicc.seed.ll | head")) + return 1 +} + +# ---- reseed: regenerate the checked-in IR seed (C-free when possible) --------- +# Uses the CURRENT seed to build the new one, compiling twice so the seed is a +# fixed point of the NEW compiler, not a one-step image of the old. Falls back to +# bin/ludicc only if the seed itself no longer assembles. Verify with +# `x bootstrap-cfree` afterwards. +fn cmd_reseed() -> int { + run("mkdir -p build/cfree") + if not write_selfhost_src("build/cfree/selfhost.ludic") { print("FAIL: write source"); return 1 } + if shq(`{cc()} selfhost/ludicc.seed.ll -o build/cfree/sh_old 2>/dev/null`) { + if not shq("build/cfree/sh_old build/cfree/selfhost.ludic > build/cfree/step1.ll") { print("FAIL: step1"); return 1 } + if not shq(`{cc()} build/cfree/step1.ll -o build/cfree/sh_new`) { print("FAIL: assemble sh_new"); return 1 } + if not shq("build/cfree/sh_new build/cfree/selfhost.ludic > selfhost/ludicc.seed.ll") { print("FAIL: reseed"); return 1 } + } else { + print("seed does not build; reseeding from bin/ludicc") + ensure_ludicc() + if cmd_selfhost_build("bin/ludicc", "build/cfree/sh_c") != 0 { print("FAIL: build from bin/ludicc"); return 1 } + if not shq("build/cfree/sh_c build/cfree/selfhost.ludic > selfhost/ludicc.seed.ll") { print("FAIL: reseed"); return 1 } + } + print(`reseeded: {line_count("selfhost/ludicc.seed.ll")} lines`) + return 0 +} diff --git a/tools/x/selfhost_test.ludic b/tools/x/selfhost_test.ludic new file mode 100644 index 00000000..11818e0f --- /dev/null +++ b/tools/x/selfhost_test.ludic @@ -0,0 +1,68 @@ +# selfhost_test.ludic — the self-hosting suite: the compiler is correct (compiles +# diverse programs to working binaries) and self-reproducing (the bootstrap +# fixpoint). Replaces selfhost/test.sh. + +# compile selfhost/tests/.ludic with bin/ludicc, assemble, run, compare +fn sh_case(name: ptr, exp: ptr) -> void { + let ll = `/tmp/x_sh_{name}.ll` + let er = `/tmp/x_sh_{name}.err` + let bn = `/tmp/x_sh_{name}` + if not shq(`bin/ludicc selfhost/tests/{name}.ludic > {ll} 2>{er}`) { + bad2(`{name}: self-host errored`, capture_line(`head -1 {er}`)); return + } + if not shq(`{cc()} {ll} -o {bn} 2>/dev/null`) { bad(`{name}: IR did not assemble`); return } + let got = capture_line(`{bn} < /dev/null`) + if (got == exp) { ok(`{name} ({got})`) } else { bad2(name, `got [{got}] want [{exp}]`) } +} + +# compile examples/.ludic as a game and diff its render against the golden +fn game_case(name: ptr, keys: ptr) -> void { + if not game_build_ok("bin/ludicc", `examples/{name}.ludic`, `/tmp/x_g_{name}`) { bad(`{name}: build`); return } + run(`printf '%s' '{keys}' | /tmp/x_g_{name} >/dev/null 2>&1`) + if shq(`cmp -s selfhost/golden/{name}.ppm out.ppm`) { ok(`{name} matches the golden render`) } + else { bad(`{name}: differs from golden`) } +} + +fn cmd_selfhost_test() -> int { + PASS = 0 + FAIL = 0 + + print("== build the self-host compiler (from the IR seed, no C) ==") + ensure_ludicc() + if is_exec("bin/ludicc") { ok("compiler builds from the IR seed (no C)") } + else { bad("self-host build"); return report() } + + print("== the self-host compiler is correct ==") + sh_case("structs", "7 9 109 2 42") + sh_case("slices", "0 20 361 777") + sh_case("control", "55 4 15 1") + sh_case("match_bits", "1 2 9 16 4 15") + sh_case("fixed", "2 3 0 6 1") + sh_case("math", "3 7 5 10 -1 0 1 2 3 3 2 5 25 50") + sh_case("math2", "1414 3 999 999 499 5 5 25 3142 179 4 2 7 25 30 500") + sh_case("textlist", "3 10 30 1 0 2 -1 30 10 10 30 30 2 0 11 104 1 0 1 0 1 0 6 -1 42 5 1 4 4") + sh_case("textlist2", "3 1 1 1 2 1 6 1 1 3 1 1 3 1 4 1 2 99 3 2 0 3 1 9 3") + sh_case("easecollide", "250 750 500 1000 1000 999 765 -88 1000 1 0 1 0 0 1 0 1 0") + sh_case("memsys", "65 66 0 99 12345 1") + sh_case("math3", "45 90 180 -135 30 60 90") + sh_case("textsplit", "1 1 1 3 1 1 1 1 1 1 1") + sh_case("color", "16744512 1090486336 1090486336 8355711 8355711 8355711") + + print("== the self-host compiler compiles real games (vs golden output) ==") + # the golden PPMs were produced by the original C compiler; the self-hosted + # compiler must reproduce them exactly. + game_case("snake", "ddssaawwddss") + game_case("menu", "ssss") + game_case("chronorift", "ddddwwwwaassK") + game_case("draw_prims", "") + + print("== the bootstrap fixpoint (seeded from bin/ludicc) ==") + if shq("bin/x bootstrap > /tmp/x_boot.out 2>&1") { ok("gen2.ll == gen3.ll (compiler reproduces itself)") } + else { bad("fixpoint not reached"); out(capture("cat /tmp/x_boot.out")) } + + print("== the C-free bootstrap (from the checked-in IR seed, no C compiler) ==") + if shq("bin/x bootstrap-cfree > /tmp/x_cfree.out 2>&1") { ok("seed.ll rebuilds the compiler and is its own fixed point") } + else { bad("C-free bootstrap failed (seed stale? run: x reseed)"); out(capture("cat /tmp/x_cfree.out")) } + + return report() +} diff --git a/tools/x/test.ludic b/tools/x/test.ludic new file mode 100644 index 00000000..259fb931 --- /dev/null +++ b/tools/x/test.ludic @@ -0,0 +1,143 @@ +# test.ludic — the top-level regression suite. Replaces test.sh. The compiler is +# written in Ludic (selfhost/) and built from a checked-in LLVM-IR seed with +# clang; there is no C compiler in the repo. This suite proves the compiler +# builds from the seed, compiles every example to its byte-exact golden render, +# self-hosts to a fixpoint, and rebuilds itself with no C compiler. +# +# It drives the other commands through `bin/x ` exactly where test.sh used +# to spawn a sibling script, so each stage stays an independent, observable run. + +# compile a feature example as a game, run it (optional keys on stdin) and match +# its stdout against the expected space-joined output. +fn feat_case(name: ptr, keys: ptr, exp: ptr, label: ptr) -> void { + if not game_build_ok("bin/ludicc", `examples/{name}.ludic`, `/tmp/x_e_{name}`) { + bad2(label, capture_line("grep -i error /tmp/x_gb.err | head -1")); return + } + var got = "" + if (keys == "") { got = capture_line(`/tmp/x_e_{name} < /dev/null`) } + else { got = capture_line(`printf '{keys}' | /tmp/x_e_{name}`) } + if (got == exp) { ok(label) } else { bad2(label, `got [{got}] want [{exp}]`) } +} + +# a "does it still compile" smoke test (parse -> lower -> link), no run +fn qsmoke(name: ptr) -> void { + if game_build_ok("bin/ludicc", `examples/{name}.ludic`, `/tmp/x_q_{name}`) { + ok(`{name} compiles (@Queries desugars to S_QUERY)`) + } else { bad2(name, capture_line("grep -i error /tmp/x_gb.err | head -1")) } +} + +# a pure-Ludic example that drives and asserts itself: compile headless to IR, +# let clang assemble it, run, and compare stdout. No C host and no C compiled. +fn net_case(name: ptr, exp: ptr) -> void { + let ll = `/tmp/x_n_{name}.ll` + let log = `/tmp/x_n_{name}.out` + if not shq(`bin/ludicc --headless examples/{name}.ludic --emit-llvm -o {ll} > {log} 2>&1`) { + let t = capture_line(`tail -1 {log}`) + bad2(name, `build ({t})`); return + } + if not shq(`{cc()} -O2 {ll} -o /tmp/x_nb_{name} >> {log} 2>&1`) { + let t = capture_line(`tail -1 {log}`) + bad2(name, `build ({t})`); return + } + let got = capture_line(`/tmp/x_nb_{name} < /dev/null`) + if (got == exp) { ok(`{name} ({got})`) } else { bad2(name, `got [{got}] want [{exp}]`) } +} + +fn cmd_test() -> int { + PASS = 0 + FAIL = 0 + + print("== the compiler is written in Ludic, not C ==") + if shq("test -e compiler") or shq("ls compiler/*.c >/dev/null 2>&1") { + bad("compiler/ C sources still present") + } else { ok("no C compiler in the repo (the compiler is selfhost/*.ludic)") } + let cleft = capture_line("find tools -name '*.c' 2>/dev/null | wc -l") + ok(`the only C in the tree is any editor tooling ({cleft} .c files)`) + + print("== the compiler builds from the IR seed (no C compiler) ==") + run("rm -f bin/ludicc") + if shq("bin/x app examples/snake.ludic --headless >/dev/null 2>&1") and is_exec("bin/ludicc") { + ok("clang selfhost/ludicc.seed.ll -> bin/ludicc") + } else { bad("compiler did not build from the seed") } + + print("== every example compiles to its golden render ==") + game_case("snake", "ddssaawwddss") + game_case("menu", "ssss") + game_case("chronorift", "ddddwwwwaassK") + + print("== self-hosting and the bootstrap fixpoints ==") + run("bin/x selfhost-test > /tmp/x_sh.out 2>&1") + if shq("grep -q 'gen2.ll == gen3.ll' /tmp/x_sh.out") { ok("the compiler reproduces itself (fixpoint)") } else { bad("fixpoint") } + if shq("grep -q 'no C compiler' /tmp/x_sh.out") { ok("the compiler rebuilds itself from the seed, C-free") } else { bad("C-free bootstrap") } + let corr = capture_line("grep -c PASS /tmp/x_sh.out") + ok(`self-host suite: {corr} checks passed (see: x selfhost-test)`) + + print("== documented syntax stays compilable (guards against spec/compiler drift) ==") + qsmoke("qdecl") + feat_case("annotations", "", "3 25 0 0", "annotations.ludic (@Queries / @Computed / @OnSpawn / @Handles)") + feat_case("lifecycle", "", "1 700 50 950 2", "lifecycle.ludic (@OnStart/@OnAttach/@OnSpawn/@OnDespawn/@OnQuit in order)") + feat_case("toggle", "", "6 0 7 1 0", "toggle.ludic (enable/disable + @OnDisable/@OnEnable across property/model)") + feat_case("strings", "", "1 2 3 4 5 6 7 8 9", "strings.ludic (str ops, interpolation, slicing)") + feat_case("rng_demo", "", "69 89 6 -1 0", "rng_demo.ludic (Random.value/int/sign)") + feat_case("time_demo", "aaaaaa", "0 1 2 3 4 16", "time_demo.ludic (Time.frame/elapsed/delta)") + feat_case("scenes", "aaaaaaaaaa", "1000 1 101 102 2 3 900 201 900 202 900", "scenes.ludic (scene/layer/on enter/on exit/become)") + feat_case("detach", "", "15 1 25 0", "detach.ludic (attach/detach + @OnAttach/@OnDetach)") + feat_case("reason", "", "503 1009", "reason.ludic (@OnDespawn reason: Despawned vs Quit)") + + # EV0b + NETWORKING N0–N6: each a self-contained pure-Ludic program, driven and + # asserted from its own `entry`. The transport is the compiler's built-in + # loopback, so a networked game runs with zero foreign code. + net_case("mod_events", "10 32 42") + net_case("net_echo", "4 10 20 30 42") + net_case("net_snapshot", "50 7 50") + net_case("net_sync", "12 3 4 50 999") + net_case("net_owner", "-1 7 0 1") + net_case("net_rpc", "0 8") + net_case("net_roles", "1 102") + net_case("net_demo", "5 999 5") + + feat_case("promote", "", "100 101 200 201", "promote.ludic (@Public -> model__spawn/despawn events)") + feat_case("cancel", "", "0 1 92", "cancel.ludic (cancellable event + cancel + emit-as-expression)") + + # EV2 the world table: the mod reflection ABI, callable from Ludic by name. + net_case("world_get", "50 1 7") + net_case("world_scan", "2 110") + net_case("world_spawn", "1 42 1") + net_case("world_mixed", "99") + net_case("world_query", "2 110") + + feat_case("recurse", "", "16", "recurse.ludic (EV6: re-entrant emit is depth-bounded, no runaway cycle)") + net_case("scoped", "2") + net_case("world_dyn", "0 1 30 100 1 30") + + feat_case("prop_events", "", "300 400", "prop_events.ludic (@Public -> prop_

    _attach/detach events)") + feat_case("scene_events", "", "10 1 20 2 30 3", "scene_events.ludic (public scene -> scene__enter/exit events)") + feat_case("program_events", "", "1 100 2 200", "program_events.ludic (@Public @OnStart/@OnQuit -> program_start/quit)") + feat_case("layer_events", "aaaa", "50 2 1 50", "layer_events.ludic (layer toggle + public layer -> layer__show/hide)") + + print("== self-hosted front-end binaries (ludicc / ludic) ==") + # the two commands are one multi-call native binary built from the seed with + # clang alone. ludicc compiles; ludic compiles-and-runs. + if shq("bin/x build-cli > /tmp/x_cli.out 2>&1") and is_exec("bin/ludicc") and is_exec("bin/ludic") { + ok("x build-cli builds bin/ludicc and bin/ludic from the seed (clang-only)") + } else { bad2("x build-cli", capture_line("tail -1 /tmp/x_cli.out")) } + + # ludicc -o drives clang to a native binary; a game links windowed by default + # (LUDIC_HOME points the linker at runtime/native/cocoa.ll). + if shq("LUDIC_HOME=. bin/ludicc examples/snake.ludic -o /tmp/x_cli_snake > /tmp/x_cli.out 2>&1") and shq("file /tmp/x_cli_snake 2>/dev/null | grep -q Mach-O") { + ok("ludicc app.ludic -o bin -> native executable") + } else { bad2("ludicc -o", capture_line("tail -1 /tmp/x_cli.out")) } + + # --emit-llvm stops at the IR. + if shq("bin/ludicc examples/snake.ludic --emit-llvm -o /tmp/x_cli_snake.ll > /tmp/x_cli.out 2>&1") and shq("head -1 /tmp/x_cli_snake.ll | grep -q 'LLVM IR'") { + ok("ludicc --emit-llvm -> LLVM IR") + } else { bad2("ludicc --emit-llvm", capture_line("tail -1 /tmp/x_cli.out")) } + + # ludic compiles, runs, and forwards the program's exit code. + write_file("/tmp/x_cli_exit.ludic", "entry { exit(42) }\n") + let rc = sh("LUDIC_HOME=. bin/ludic /tmp/x_cli_exit.ludic > /tmp/x_cli.out 2>&1") + if (rc == 42) { ok("ludic app.ludic -> compiles, runs, forwards exit code") } + else { bad2("ludic run: expected exit 42", `got {str(rc)}`) } + + return report() +} diff --git a/tools/x/tools.ludic b/tools/x/tools.ludic new file mode 100644 index 00000000..c0c7aab9 --- /dev/null +++ b/tools/x/tools.ludic @@ -0,0 +1,186 @@ +# tools.ludic — the Ludic editor toolchain: building ludic-fmt / ludic-lsp and +# their regression suite. Replaces tools/build-tools.sh and tools/test-tools.sh. +# +# The formatter and language server are themselves written in Ludic +# (tools/ludic-tools/*.ludic) and compiled by ludicc; no C is compiled. The LSP +# protocol test, the TextMate grammar test and the vocabulary check are still +# driven through python3/node (they are not project shell scripts), invoked here. + +# refresh one editor-copy of a shared grammar file if it has drifted +fn sync_one(shared: ptr, dst: ptr) -> void { + if not shq(`cmp -s {shared} {dst}`) { + run(`cp {shared} {dst}`) + print(`sync: {shared} -> {dst}`) + } +} + +# VS Code needs the grammar inside its own extension directory, so it gets a +# copy that build refreshes rather than trusts (test-tools asserts they match). +fn sync_vscode_grammar() -> void { + if not shq("test -d tools/editors/vscode") { return } + run("mkdir -p tools/editors/vscode/syntaxes") + sync_one("tools/editors/shared/ludic.tmLanguage.json", "tools/editors/vscode/syntaxes/ludic.tmLanguage.json") + sync_one("tools/editors/shared/ludic.markdown-injection.json", "tools/editors/vscode/syntaxes/ludic.markdown-injection.json") + sync_one("tools/editors/shared/language-configuration.json", "tools/editors/vscode/language-configuration.json") +} + +# is `flag` present anywhere in argv? +fn has_flag(flag: ptr) -> bool { + var i = 2 + while i < arg_count() { if (arg(i) == flag) { return true }; i = i + 1 } + return false +} + +# ---- tools: build the editor toolchain -------------------------------------- +# usage: x tools [--install] [--test] +fn cmd_tools() -> int { + ensure_ludicc() + print("ludicc: tools/ludic-tools/fmt.ludic -> bin/ludic-fmt (Ludic -> LLVM IR -> binary, no C)") + if not build_tool("ludic-fmt", "tools/ludic-tools/fmt.ludic") { return 1 } + print("ludicc: tools/ludic-tools/lsp.ludic -> bin/ludic-lsp (Ludic -> LLVM IR -> binary, no C)") + if not build_tool("ludic-lsp", "tools/ludic-tools/lsp.ludic") { return 1 } + sync_vscode_grammar() + + if has_flag("--install") { + run("mkdir -p \"$HOME/.local/bin\"") + run("ln -sf \"$PWD/bin/ludic-fmt\" \"$HOME/.local/bin/ludic-fmt\"") + run("ln -sf \"$PWD/bin/ludic-lsp\" \"$HOME/.local/bin/ludic-lsp\"") + print("linked into ~/.local/bin (make sure it is on your PATH)") + } + if has_flag("--test") { return cmd_test_tools() } + print("done. editors: see tools/editors/README.md") + return 0 +} + +# ---- test-tools: the editor-toolchain regression suite ----------------------- +fn cmd_test_tools() -> int { + PASS = 0 + FAIL = 0 + let fmt = "bin/ludic-fmt" + if not is_exec(fmt) { err("bin/ludic-fmt missing — run: x tools\n"); return 2 } + if not is_exec("bin/ludic-lsp") { err("bin/ludic-lsp missing — run: x tools\n"); return 2 } + + print("formatter") + + # --- idempotence: formatting twice equals formatting once ------------------ + let nsrc = capture_line("find examples runtime -name '*.ludic' | wc -l") + if shq(`fail=0; for f in $(find examples runtime -name '*.ludic' | sort); do {fmt} "$f" > /tmp/x_a 2>/dev/null; {fmt} /tmp/x_a > /tmp/x_b 2>/dev/null; cmp -s /tmp/x_a /tmp/x_b || fail=1; done; test $fail -eq 0`) { + ok(`idempotent on {nsrc} files`) + } else { bad("idempotent on the source tree") } + + # --- meaning preserved: reformatting a formatted file must be a no-op ------- + if shq(`fail=0; for f in examples/hello.ludic examples/snake.ludic examples/menu.ludic examples/qdecl.ludic examples/scenes.ludic; do test -f "$f" || continue; {fmt} "$f" > /tmp/x_f1 2>/dev/null; {fmt} /tmp/x_f1 > /tmp/x_f2 2>/dev/null; cmp -s /tmp/x_f1 /tmp/x_f2 || fail=1; done; test $fail -eq 0`) { + ok("formatting is idempotent (fmt(fmt(x)) == fmt(x))") + } else { bad("formatting is not idempotent") } + + # --- the strongest invariant: only whitespace ever changes ----------------- + # every token is re-emitted in order, so the input and output must be + # byte-identical once all whitespace is stripped. + if shq(`fail=0; for f in $(find examples runtime -name '*.ludic') README.md LANGUAGE.md COMPILING.md; do test -f "$f" || continue; a=$(tr -d ' \t\n' < "$f" | shasum | cut -d' ' -f1); b=$({fmt} "$f" 2>/dev/null | tr -d ' \t\n' | shasum | cut -d' ' -f1); test "$a" = "$b" || fail=1; done; test $fail -eq 0`) { + ok("only whitespace changes (byte-identical modulo spacing)") + } else { bad("formatter altered non-whitespace bytes") } + + # --- multi-byte characters must survive intact ----------------------------- + write_file("/tmp/x_utf8.ludic", "program E {\n # … ellipsis in a comment\n const S: str = \"café → naïve\"\n}\n") + if shq(`{fmt} /tmp/x_utf8.ludic > /tmp/x_utf8.out 2>/dev/null; cmp -s /tmp/x_utf8.ludic /tmp/x_utf8.out`) { + ok("UTF-8 preserved byte for byte") + } else { bad("UTF-8 mangled") } + write_file("/tmp/x_utf8b.ludic", "program F {\nfn f() -> int { return … }\n}\n") + let ua = capture_line("tr -d ' \t\n' < /tmp/x_utf8b.ludic | shasum | cut -d' ' -f1") + let ub = capture_line(`{fmt} /tmp/x_utf8b.ludic | tr -d ' \t\n' | shasum | cut -d' ' -f1`) + check("unrecognised characters pass through whole", ub, ua) + + # --- comments survive, the whole reason this is not `ludicc --fmt` ---------- + write_file("/tmp/x_c.ludic", "program C {\n # keep me\n property P { x: int = 0 } # and me\n}\n") + let ncmt = capture_line(`{fmt} /tmp/x_c.ludic | grep -c '#'`) + check("comments preserved", ncmt, "2") + + # --- messy input is normalised --------------------------------------------- + write_file("/tmp/x_m.ludic", "program M{\nproperty P{x:int=0}\nhandler S phase Update{let a=1+2\nif a== -1 {a=-a}}\n}\n") + run(`{fmt} /tmp/x_m.ludic > /tmp/x_m.out 2>/dev/null`) + if shq("grep -q '^ property P { x: int = 0 }$' /tmp/x_m.out") { ok("reindents and respaces") } else { bad("reindents and respaces") } + if shq("grep -q 'a = -a' /tmp/x_m.out") { ok("unary minus not spaced") } else { bad("unary minus not spaced") } + + # --- language conventions are respected, not overwritten ------------------- + write_file("/tmp/x_u.ludic", "program U {\n ui M {\n panel id=Root w=10 {\n button id=Go text=\"go\"\n }\n }\n}\n") + if shq(`{fmt} /tmp/x_u.ludic | grep -q 'id=Root'`) { ok("widget props stay tight (id=Root)") } else { bad("widget props stay tight") } + write_file("/tmp/x_q.ludic", "program Q {\n handler S phase Update {\n for (p) in query [Pos, {Foe}] { }\n }\n property Pos { x: int = 0 }\n property Foe { }\n}\n") + if shq(`{fmt} /tmp/x_q.ludic | grep -q '\\[Pos, {{Foe}}\\]'`) { ok("query tags stay tight ({Foe})") } else { bad("query tags stay tight") } + write_file("/tmp/x_al.ludic", "program A {\n const R_A: int = 0 # one\n const R_BBB: int = 1 # two\n}\n") + if shq(`{fmt} /tmp/x_al.ludic | grep -q 'R_A: int = 0 # one'`) { ok("hand alignment preserved") } else { bad("hand alignment preserved") } + + # --- --check exit status, for CI and pre-commit hooks ---------------------- + let chk1 = sh(`{fmt} --check -q /tmp/x_m.ludic`) + check("--check exits 1 on unformatted input", str(chk1), "1") + run(`{fmt} -w /tmp/x_m.ludic`) + let chk2 = sh(`{fmt} --check -q /tmp/x_m.ludic`) + check("--check exits 0 after -w", str(chk2), "0") + + # --- markdown: fences formatted, prose untouched --------------------------- + write_file("/tmp/x_d.md", "# T\n\nprose with spaces\n\n```ludic\nprogram D{property P{x:int=0}}\n```\n\n```python\nz = 1\n```\n") + run(`{fmt} /tmp/x_d.md > /tmp/x_d.out 2>/dev/null`) + if shq("grep -q 'prose with spaces' /tmp/x_d.out") { ok("markdown prose untouched") } else { bad("markdown prose untouched") } + if shq("grep -q 'z = 1' /tmp/x_d.out") { ok("non-ludic fences untouched") } else { bad("non-ludic fences untouched") } + if shq("grep -q 'program D { property P { x: int = 0 } }' /tmp/x_d.out") { ok("ludic fences formatted") } else { bad("ludic fences formatted") } + + print("language server") + if shq("python3 tools/test-lsp.py") { ok("language server protocol") } else { bad("language server protocol") } + + print("") + print("editor assets") + test_json("tools/editors/shared/ludic.tmLanguage.json") + test_json("tools/editors/shared/ludic.markdown-injection.json") + test_json("tools/editors/shared/language-configuration.json") + test_json("tools/editors/vscode/package.json") + test_json("tools/editors/vscode/snippets/ludic.json") + test_xml("tools/editors/jetbrains/src/main/resources/META-INF/plugin.xml") + test_xml("tools/editors/jetbrains/src/main/resources/META-INF/ludic-markdown.xml") + + if shq("command -v node >/dev/null 2>&1") { + if shq("node --check tools/editors/vscode/src/extension.js 2>/dev/null") { ok("extension.js parses") } else { bad("extension.js parses") } + print("textmate grammar") + if shq("node tools/test-grammar.js") { ok("textmate grammar") } else { bad("textmate grammar") } + } else { + print(" skip extension.js and grammar tests (node not installed)") + } + + # VS Code carries its own copy of the shared grammar; catch an edit to the copy + if shq("cmp -s tools/editors/shared/ludic.tmLanguage.json tools/editors/vscode/syntaxes/ludic.tmLanguage.json") and shq("cmp -s tools/editors/shared/ludic.markdown-injection.json tools/editors/vscode/syntaxes/ludic.markdown-injection.json") and shq("cmp -s tools/editors/shared/language-configuration.json tools/editors/vscode/language-configuration.json") { + ok("vscode grammar copies match tools/editors/shared") + } else { bad2("vscode grammar copies have drifted", "run: x tools to resync") } + + # the JetBrains plugin is off by default (its first build pulls a gigabyte of + # IntelliJ SDK). One env var away: LUDIC_TEST_JETBRAINS=1 x test-tools + if (getenv_or("LUDIC_TEST_JETBRAINS", "0") == "1") { + if shq("test -x tools/editors/jetbrains/gradlew") { + if shq("cd tools/editors/jetbrains && ./gradlew buildPlugin verifyPluginStructure --console=plain -q >/dev/null 2>&1 && test -f build/distributions/Ludic-1.0.0.zip") { ok("jetbrains plugin builds and verifies") } else { bad("jetbrains plugin build") } + if shq("cd tools/editors/jetbrains && ./gradlew test --console=plain -q >/dev/null 2>&1") { ok("jetbrains platform tests (lexer, file type, PSI, folding)") } else { bad("jetbrains platform tests") } + } else { print(" skip jetbrains plugin (no gradle wrapper)") } + } else { + print(" skip jetbrains plugin build (set LUDIC_TEST_JETBRAINS=1)") + } + + # the vocabulary lives in one place; drift between it and its copies (the + # TextMate grammar, the Kotlin lexer) is the failure mode this layout prevents. + if shq("python3 tools/check-vocabulary.py") { ok("vocabulary in sync across grammar/lexer/header") } else { bad("vocabulary drifted") } + + # every feature the compiler actually implements — namespace methods, keywords, + # types, phases — must have a docs/language page. This reads the implementation + # (emit_ns_call + ludic_syntax.h), so shipping a feature without docs fails here. + if shq("python3 tools/docgen/check-impl.py") { ok("docs cover every implemented feature") } else { bad("docs drifted from the implementation") } + + return report() +} + +fn test_json(path: ptr) -> void { + let bn = capture_line(`basename {path}`) + if shq(`python3 -c 'import json,sys;json.load(open(sys.argv[1]))' {path} 2>/dev/null`) { + ok(`valid JSON: {bn}`) + } else { bad(`invalid JSON: {path}`) } +} +fn test_xml(path: ptr) -> void { + let bn = capture_line(`basename {path}`) + if shq(`python3 -c 'import xml.dom.minidom,sys;xml.dom.minidom.parse(sys.argv[1])' {path} 2>/dev/null`) { + ok(`valid XML: {bn}`) + } else { bad(`invalid XML: {path}`) } +}